关于执行shell脚本中的exit却直接退出终端
问题
执行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 信号产生
