gpt4 book ai didi

linux - 我对运行 shell 脚本的 "sh xxx.sh"和 "./xxx.sh"之间的差异感到困惑

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:54 29 4
gpt4 key购买 nike

在这里,我有一个名为 load.sh 的 shell 脚本。

它用监督启动我名为“demo”的程序,当我用 sh load.sh start | 运行它时停止,它运行良好。

但是,当我使用 ./load.sh start | 运行它时停止,效果不好。该演示经常由监督者启动(和退出)。

这两种shell脚本运行方式有什么问题?脚本中是否有任何问题(错误)导致监督频繁重启演示?非常感谢!

#!/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

最佳答案

sh script.shsh 中运行脚本,而作为 ./script.sh 运行它时使用其第一个指定的任何内容“shebang”行 - 在本例中为 /bin/bash

sh/bin/bash 可能是不同的 shell,因此它们对脚本的解释不同。 sh 是什么取决于您的发行版、$PATH、别名等。

关于linux - 我对运行 shell 脚本的 "sh xxx.sh"和 "./xxx.sh"之间的差异感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31473298/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com