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

Linux shell脚本中的函数未正确执行,linux,bash,shell,debian,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_s

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

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

#!/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\u load\u excalibur
函数。 之后,它不再工作了。 它从不从函数
pga\u load\u excalibur
返回。 似乎对
的调用已加载=
lsmod | grep excalbr
从未返回,因为后续的
echo`从未打印

但是,如果我在一个单独的shell脚本中复制/粘贴这个函数,它就会工作

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

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

它不起作用。 我用的是Debian哮喘病7.9 x64

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

请注意,我还尝试将grep行替换为:

is_loaded=$(lsmod | grep excalbr)
但它也不起作用。 我的想法快用完了:(


Z.

如果在调试模式下运行脚本,会得到什么?请尝试使用以下工具运行脚本:

#!/bin/sh-xv


这可能会让你知道它失败的原因,如果你不明白,就发布输出好主意!我没有想过。明天早上我会试试,让你知道。嗯……我用你的代码头更改了我的代码头:#!/bin/sh-xv一切都很好。所以看来使用#!bin/sh-e不是好的解决方案。-e意味着脚本如果命令失败,会立即退出。我仍然不明白该命令有什么问题:is_loaded=
lsmod | grep excalbr
最后,我删除了-xv并简单地将#!/bin/sh放在标题中。我不是100%满意,但至少脚本可以工作。从-xv发送调试信息,我会尽力提供帮助