Jon*_*ang 1 linux bash shell sh
在这里,我有一个名为的shell脚本load.sh.
它启动我的程序名为"演示"与监督,当我运行它sh load.sh start | stop,它运作良好.
但是,当我运行它时./load.sh start | stop,它很糟糕.监督经常启动(并退出)演示.
运行shell脚本的两种方法有什么问题?并且脚本中是否有任何问题(bug)导致监督频繁重启演示?非常感谢!
#!/bin/bash
cd `dirname $0` || exit
mkdir -p status/demo
dir_name=`pwd`
STR_LIB=${dir_name}/lib
if [ -z "${LD_LIBRARY_PATH}" ]; then
export LD_LIBRARY_PATH="${STR_LIB}"
else
export LD_LIBRARY_PATH="${STR_LIB}:${LD_LIBRARY_PATH}"
fi
start() {
sleep 1
bin/supervise.demo -u status/demo bin/demo >/dev/null 2>&1 &
}
stop() {
if [ -f status/demo/lock ]; then
supervise_demo_pid=`/sbin/fuser status/demo/lock`
`ps -ef | grep "$supervise_demo_pid" | grep "supervise.demo" | grep -v grep > /dev/null 2>&1`
if [ $? -eq 0 ] && [ "$supervise_demo_pid" != "" ] ; then
echo "kill supervise.demo process:"${supervise_demo_pid}
kill -9 $supervise_demo_pid
fi
fi
if [ -f status/demo/status ]; then
demo_pid=`od -An -j16 -N2 -tu2 status/demo/status`
`ps -ef | grep "$demo_pid" | grep "demo" | grep -v grep > /dev/null 2>&1`
if [ $? -eq 0 ]; then
echo "kill demo process:"${demo_pid}
kill -9 $demo_pid
fi
fi
}
case "$1" in
start)
stop
start
echo "Done!"
;;
stop)
stop
echo "Done!"
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
Run Code Online (Sandbox Code Playgroud)
sh script.sh运行脚本sh,同时运行它./script.sh使用在其第一个"shebang"行上指定的任何内容 - /bin/bash在这种情况下.
sh并且/bin/bash可能是不同的shell,因此它们以不同的方式解释脚本.什么sh是取决于你的分布,$ PATH,别名等.