当我在shell脚本中使用exit命令时,脚本将终止终端(提示符)。是否有办法终止一个脚本,然后留在终端?
我的脚本run.sh希望通过直接获取或者从另一个脚本获取来执行。
编辑:
更具体地说,有两个脚本run2.sh as
...
. run.sh
echo "place A"
...
然后运行。sh as
...
exit
...
当我经过它的时候。如果它在run.sh中命中退出代码线,我希望它停止到终端并停留在那里。但是使用出口,整个航站楼会关闭。
PS:我已经尝试使用返回,但回声代码线仍将执行....
正如其他人注意到的那样,源脚本和执行脚本使用return和exit来保持相同的会话打开,这是正确的。
这里有一个相关的技巧,如果你想要一个脚本,应该保持会话打开,不管它是否来源。
下面的示例可以像foo.sh那样直接运行,也可以像。foo.sh / foo.sh来源。无论哪种方式,它都将在“退出”后保持会话打开。$@字符串被传递,这样函数就可以访问外部脚本的参数。
#!/bin/sh
foo(){
read -p "Would you like to XYZ? (Y/N): " response;
[ $response != 'y' ] && return 1;
echo "XYZ complete (args $@).";
return 0;
echo "This line will never execute.";
}
foo "$@";
终端的结果:
foo.sh美元
你想要XYZ吗?(Y / N): N
美元。foo.sh
你想要XYZ吗?(Y / N): N
$ |
(终端窗口保持打开并接受额外输入)
这对于在单个终端中快速测试脚本更改非常有用,同时在您工作时在主退出/返回下保留一堆废弃代码。它还可以使代码在某种意义上更具可移植性(如果您有大量的脚本,这些脚本可能以不同的方式调用,也可能不以不同的方式调用),尽管只在适当的地方使用return和exit要简单得多。