shell脚本中的函数未正确执行

时间:2016-05-19 15:49:17

标签: linux bash shell debian

我编写了一个脚本来启动/停止/重启自定义服务器应用程序。

启动守护程序服务器时,它应该执行以下操作:

#!/bin/sh -e
### BEGIN INIT INFO
...
...
### END INIT INFO

# Start service
pga_server_start()
{
        /opt/pga/server/server -d
}


# Stop  service
pga_server_stop()
{
        PID=`cat /var/lock/pga_server.lock`
        /bin/kill --signal SIGTERM $PID
}

pga_load_excalibur()
{
        is_loaded=`lsmod | grep excalbr`
        echo "Done"


        if [ -z "$is_loaded" ]; then
                /usr/local/bin/excload
                echo "Driver excalibur loaded."
        else
                echo "Driver excalibur already loaded."
        fi
}

case "$1" in
        start)
        pga_load_excalibur
        pga_server_start
        ;;
...
...

最初它运作良好。然后我添加了pga_load_excalibur函数。 之后,它不再起作用了。 它永远不会从函数pga_load_excalibur返回。 似乎是对is_loaded= lsmod |的调用永远不会打印grep excalbr never returns as the subsequent echo`。

但是,如果我在单独的shell脚本中复制/粘贴此函数......它可以正常工作。

但是如果我以这种方式手动启动启动脚本:

/etc/init.d/server start 要么 服务服务器启动

它不起作用。 我使用的是Debian Wheezy 7.9 x64。

虽然我不是一个schell脚本,但它看起来是正确的。我不明白为什么它嵌入到这个服务启动脚本中时不起作用。

请注意,我还尝试用以下代码替换grep行:

is_loaded=$(lsmod | grep excalbr)

但它也不起作用。 我的想法已经不多了:(

Ž。

1 个答案:

答案 0 :(得分:1)

如果在调试模式下运行脚本,会得到什么?尝试运行它:

#!/bin/sh -xv

这可能会让人知道它失败的原因,如果你无法弄明白就输出结果