当我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
,当下标结束时,您的终端窗口也将退出/关闭。
详细请参阅使用和之间有什么区别?sh
source
归档时间: |
|
查看次数: |
202356 次 |
最近记录: |