问题
执行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