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发送调试信息,我会尽力提供帮助