Bash 脚本出错时退出 (set -e) 关闭 Putty SSH 会话

DD.*_*DD. 4 ssh putty

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

如何阻止终端关闭?

and*_*ble 15

你是如何运行脚本的?子进程退出的情况不应该影响运行它的外壳程序……除非您将脚本放入正在运行的外壳程序中。

例如...

./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it
Run Code Online (Sandbox Code Playgroud)

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

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

  • 粗暴地说,“./my-script.sh”的意思是“运行程序./my-script.sh”作为一个新进程。“.my-script.sh”的意思是“使这个脚本成为我当前进程的一部分”。 (3认同)