我使用 set -e 强制脚本在运行命令时发生错误时退出。然而,这样做的副作用是关闭了我用来通过 SSH 连接到主机的 putty 终端窗口。
如何阻止终端关闭?
答案1
您如何运行脚本?子进程退出的情况不应该影响运行它的 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
bash
'nix shell 是某个 shell 解释器(例如,、、 )的运行进程。对脚本执行“source”操作(可以使用命令或其别名ksh
执行此操作)会告诉该解释器打开指定文件并处理其内容。实际上,脚本成为以交互方式输入命令的快捷方式。定义的函数、设置的变量和(在您的情况下)处理的 s 都会在原始 shell 中生效。csh
bash
source
.
exit
./my-script.sh
是一个简单的文件路径。./
指当前目录和my-script.sh
该目录中的脚本。当文件被标记为可执行时,该文件将被执行。对于脚本,这意味着启动一个新的解释器进程(由#!
脚本顶部的行定义,或/bin/sh
默认情况下)并使用它来解释脚本。定义的函数、设置的变量和exit
处理的操作都限于该新的解释器进程。