题 Bash脚本退出错误(set -e)关闭putty SSH会话


我正在使用set -e强制我的脚本在运行命令时发生错误时退出。 然而,这有关闭我的putty终端窗口的副作用,我用来通过SSH连接到主机。

如何阻止终端关闭?


4
2017-07-09 06:26






答案:


你是如何运行脚本的?子进程退出的情况不应该影响运行它的shell ...除非您将脚本提供给正在运行的shell。

例如...

./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it

'nix shell是一些shell解释器的运行过程(例如, bashkshcsh)。 “源”一个脚本(你可以做的 bash 用命令 source 或它的别名 .)告诉解释器打开指定的文件并处理其内容。实际上,该脚本成为以交互方式输入命令的快捷方式。定义的函数,变量集和(在您的情况下) exits处理在原始shell中生效。

./my-script.sh 是一个简单的文件路径。 ./ 指的是当前目录和 my-script.sh 到该目录中的脚本。当文件标记为可执行文件时,将执行该文件。对于脚本,这意味着启动一个新的解释器进程(由 #! 脚本顶部的行,或 /bin/sh 默认情况下)并使用它来解释脚本。定义的函数,变量集和 exit处理过的只限于新的翻译过程。


13
2017-07-09 06:33



你是对的我正在使用“.my-script”。你能解释一下这个区别吗? - DD.
更糟糕的是,“。/ my-script.sh”意味着“运行程序./my-script.sh”作为一个新进程。 “。my-script.sh”的意思是“使这个脚本成为我当前进程的一部分”。 - Jenny D
我根据要求编辑了我的答案以进一步解释。 - anderbubble
男人,我无法相信这一次我正在重新连接,登录,设置环境并执行因为这个小怪癖!大声笑! - Michal Ciechan