当我exit在shell脚本中使用命令时,脚本将终止终端(提示).有没有办法终止脚本然后留在终端?
我的脚本run.sh应该通过直接获取源或从其他脚本获取来执行.
编辑:更具体,有两个脚本run2.sh作为
...
. run.sh
echo "place A"
...
Run Code Online (Sandbox Code Playgroud)
而run.sh作为
...
exit
...
Run Code Online (Sandbox Code Playgroud)
当我运行它时. run2.sh,如果它进入exit代码行run.sh,我希望它停在终端并留在那里.但是使用exit,整个终端都关闭了.
PS:我试过用return,但echo代码行仍然会被执行....
Dom*_*nef 237
"问题"实际上是你在寻找而不是执行脚本.当您获取文件时,其内容将在当前shell中执行,而不是生成子shell.所以包括exit在内的所有内容都会影响当前的shell.
而不是使用exit,你会想要使用return.
rua*_*akh 39
是; 你可以用return而不是exit.它的主要目的是从shell函数返回,但如果你在source-d脚本中使用它,它将从该脚本返回.
正如Bash参考手册的 §4.1"Bourne Shell Builtins"所说:
Run Code Online (Sandbox Code Playgroud)return [n]导致shell函数以返回值n退出.如果未提供n,则返回值是函数中执行的最后一个命令的退出状态.这也可以用于终止使用
.(或source)内置执行的脚本的执行,返回n或脚本中执行的最后一个命令的退出状态作为脚本的退出状态.RETURN在执行函数或脚本之后继续执行之前,将执行与陷阱关联的任何命令.返回状态是非零值,如果return被使用的功能外,而不是由执行脚本的过程中.或source.
小智 11
您可以在 return 语句/命令之后添加一个额外的退出命令,以便它同时适用于从命令行执行脚本和从终端获取的脚本。
脚本中的退出代码示例:
if [ $# -lt 2 ]; then
echo "Needs at least two arguments"
return 1 2>/dev/null
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
exit当您在return命令之后获取脚本时,将不会调用带有命令的行。
执行脚本时,return命令会出错。因此,我们通过将错误消息转发到/dev/null.
而不是使用运行的代码. run2.sh,你可以使用运行脚本sh run2.sh或bash run2.sh
一个新实例,将打开运行脚本,然后它会在剧本留下打开另一个壳的年底前关闭.`
事实上,我认为你可能对自己应该如何做感到困惑run a script。
如果您用来sh运行脚本,例如sh ./run2.sh,,即使嵌入脚本以 结尾exit,您的终端窗口仍然会保留。
但是,如果您使用.或source,当下标结束时,您的终端窗口也将退出/关闭。
详细请参阅使用和之间有什么区别?shsource
| 归档时间: |
|
| 查看次数: |
202356 次 |
| 最近记录: |