关于执行shell脚本中的exit却直接退出终端

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 关于执行shell脚本中的exit却直接退出终端,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

问题

执行shell脚本中的exit却导致直接退出终端

> vi 1.sh
echo success
exit 1
echo 666

> source 1.sh

使用 ./1.sh 执行脚本得chmod +x 1.sh,偷懒直接使用source 1.sh,结果脚本中的exit直接导致退出了终端

原因

source 1.sh这种执行方式,不创建子shell,source不是直接执行一个文件,而是从一个文本文件里面读命令行,然后执行这些命令。这也是为啥source执行脚本不用加可执行权限的原因。

如此,相当于直接在终端运行了exit,自然会退出终端。

解决

别偷懒,chmod加x权限,通过./执行脚本

==============================================

笔记整理:

Linux执行文件的几种方式

(1)./xxx.sh
执行当前目录的xxx.sh文件,当然输入完整脚本路径也行,需要xxx.sh有可执行权限

(2) sh xxx.sh
使用shell解释器来执行xxx.sh,不要求文件有可执行权限,创建子shell,子shell里面的变量父shell无法使用,对环境变量的修改也不影响父shell。父shell中的局部变量,子shell也无法使用,只有父shell的环境变量,子shell能够使用。

(3)source xxx.sh
不是执行脚本文件,而是从脚本中读取一条条指令,然后放到终端去执行。(. xxx.sh和source效果相同,作用都是使刚修改过的配置文件立即生效)


exit指令

作用:
退出当前shell终端或终止当前脚本的执行

用法:

exit
退出,退出码不变,即为最后一条指令的退出码

exit n
退出,设置退出码为n,如exit $?即设置退出码为上条指令的退出码

trap "commands" EXIT
捕捉到脚本执行结束的信息时,执行commands

关于trap指令,可点这里了解。

举例:
2.sh调用1.sh,1.sh结束时设置了退出码为123,调用方可根据退出码进行相应操作
在这里插入图片描述


关于退出码(exit status,或exit code)的约定:

0表示成功(Zero – Success)

非0表示失败(Non-Zero – Failure)

2表示用法不当(Incorrect Usage)

127表示命令没有找到(Command Not Found)

126表示不是可执行的(Not an executable)

>=128 信号产生
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146144.html

(1)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!