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

标签 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永远不会返回,因为后续的echo` 永远不会被打印。

但是,如果我将此函数复制/粘贴到一个单独的 shell 脚本中……它会起作用。

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

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

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

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

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

is_loaded=$(lsmod | grep excalbr)

但它也不起作用。 我的想法用完了:(

Z.

最佳答案

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

#!/bin/sh -xv

这可能会给出失败原因的一些想法,如果您无法弄清楚,请发布输出

关于linux - shell 脚本中的函数未正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328270/

相关文章:

linux排序命令在数据中带有分隔符

linux - 连接服务协议(protocol)时出错 : failed to connect to http://127. 0.0.1:41209/y-F2GYjV9_Y=/

python - wx.TextCtrl(或底层 GTK+)的多线程问题

linux - 仅 Grep 某些文件

linux - 在 bash 中打印文件夹名称

c++ - 在 cmake 中集成 bash 测试脚本

bash:打印 x 空行数

shell - SED 用单引号和双引号替换内容

bash - ssh,nohup,然后将结果复制回去

linux - 通过 ssh 导入远程变量