当我在shell脚本中使用exit命令时,脚本将终止终端(提示符)。是否有办法终止一个脚本,然后留在终端?

我的脚本run.sh希望通过直接获取或者从另一个脚本获取来执行。

编辑: 更具体地说,有两个脚本run2.sh as

...
. run.sh
echo "place A"
...

然后运行。sh as

...
exit
...

当我经过它的时候。如果它在run.sh中命中退出代码线,我希望它停止到终端并停留在那里。但是使用出口,整个航站楼会关闭。

PS:我已经尝试使用返回,但回声代码线仍将执行....


当前回答

要编写一个既可以作为shell脚本运行,也可以作为rc文件源运行的脚本,该脚本可以检查和比较$0和$BASH_SOURCE,并确定是否可以安全地使用exit。

下面是一个简短的代码片段

[ "X$(basename $0)" = "X$(basename $BASH_SOURCE)" ] && \
    echo "***** executing $name_src as a shell script *****" || \
    echo "..... sourcing $name_src ....."

其他回答

而不是运行脚本使用。您可以使用sh Run2.sh或bash Run2.sh运行它

将启动一个新的子shell,然后运行脚本,它将在脚本结束时关闭,而打开另一个shell。

我认为这是因为您在源模式下运行它 带点的

. myscript.sh

你应该在子shell中运行它:

/full/path/to/script/myscript.sh

“源”http://ss64.com/bash/source.html

要编写一个既可以作为shell脚本运行,也可以作为rc文件源运行的脚本,该脚本可以检查和比较$0和$BASH_SOURCE,并确定是否可以安全地使用exit。

下面是一个简短的代码片段

[ "X$(basename $0)" = "X$(basename $BASH_SOURCE)" ] && \
    echo "***** executing $name_src as a shell script *****" || \
    echo "..... sourcing $name_src ....."

我也遇到了同样的问题,根据上面的答案和我的理解,最终对我有用的是:

有一个shebang行来调用预期的脚本,例如, # !/bin/bash使用bash执行脚本

我有两种shebang的脚本。因此,使用sh或。不可靠,因为它会导致错误执行(比如当脚本运行不完全时退出)

因此,答案是

确保脚本有一个shebang,这样就不会对其预期的处理程序产生疑问。 Chmod .sh文件以便执行。(chmod +x file.sh) 直接调用它,不需要任何sh或。 (. / myscript.sh)

希望这对有类似问题的人有所帮助。

还要确保返回时带有预期的返回值。否则,如果你在遇到退出时使用exit,它将从你的base shell退出,因为source没有创建另一个进程(实例)。