Answers:
您可以使用如下形式:
$(basename $0) && exit
$(basename $0)
将创建当前脚本的新实例,exit
并将退出脚本的当前实例。
这是一个突出显示上述方法的测试脚本:
#!/bin/bash
if ! [[ $count =~ ^[0-9]+$ ]] ; then
export count=0
fi
echo $count
if [ $count -le 10 ]; then
count=$(echo "$count+1" | bc)
./$(basename $0) && exit #this will run if started from the same folder
fi
echo "This will be printed only when the tenth instance of script is reached"
如果您不使用export count=0
(使count
成为环境变量)而仅使用count=0
(使cont
成为本地脚本变量),则该脚本将永远不会停止。
&& exit
仅在脚本成功的情况下退出。因此,例如,如果脚本不可执行或存在语法错误,则很可能会旋转。
可靠地获取当前正在执行的脚本比您想象的要难。参见http://mywiki.wooledge.org/BashFAQ/028。
相反,您可以执行以下操作:
main_menu() {
printf '1. Do something cool\n'
printf '2. Do something awesome\n'
: ... etc
}
some_sub_sub_menu() {
...
printf 'X. Return to main menu\n'
...
if [[ $choice = [Xx] ]]; then
exit 255
fi
}
while true; do
(main_menu)
res=$?
if (( res != 255 )); then
break
fi
done
基本上,您在子外壳程序中运行main_menu函数,因此,如果退出main_menu或任何子菜单,则退出子外壳程序,而不是主外壳程序。在此选择退出状态255表示“再次出发”。任何其他退出状态都将打破原本无限的循环。
$ScriptLoc
无论如何,这应该是:./ScriptLoc
在当前目录中查找具有该名称的脚本。