如何从脚本本身内部完全重新启动脚本

Moo*_*oom 26 command-line scripts restart

我正在设置一个带有菜单和子菜单、选项等的 shell 脚本。但是在每个菜单/子菜单/等上,我需要一个“返回主菜单”选项。

我已经设置了菜单并且它工作正常,但是我需要一种方法来简单地从头开始重新启动脚本,重置所有变量等。

或者退出当前脚本并重新启动它的方法。

我试过这样做:

ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Run Code Online (Sandbox Code Playgroud)

但这会在“旧”脚本中启动“新”脚本,因此当我退出“新”脚本时,它会返回到“旧”脚本(如果有任何意义)。这是脚本中的脚本之类的东西。

任何人都知道如何完全重新启动它?

poo*_*lie 28

是的

exec "$ScriptLoc"
Run Code Online (Sandbox Code Playgroud)

exec内建命令的bash替换为新的一个当前程序。


Rad*_*anu 10

你可以使用这样的东西:

$(basename $0) && exit
Run Code Online (Sandbox Code Playgroud)

$(basename $0)将创建当前脚本的新实例,并exit从脚本的当前实例退出。

这是一个突出显示上述方法的测试脚本:

$(basename $0) && exit
Run Code Online (Sandbox Code Playgroud)

如果您不使用export count=0(使其count成为环境变量)而只使用count=0(使其cont成为本地脚本变量),则脚本将永远不会停止。