我使用set -e强制脚本在运行命令时发生错误时退出。 然而,这有closures我的腻子terminal窗口,我用来通过SSH连接到主机的副作用。
如何阻止terminalclosures?
你如何运行脚本? subprocess退出的情况不应该影响运行它的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解释器的运行过程(例如bash , ksh , csh )。 “源”脚本(可以通过命令source或其别名在bash中执行),告诉解释器打开指定的文件并处理其内容。 实际上,脚本成为交互式input命令的快捷方式。 定义的函数,variables设置和(在你的情况下) exit处理在原始shell中生效。
./my-script.sh是一个简单的文件path。 ./指向当前目录, my-script.sh指向该目录中的脚本。 当文件被标记为可执行时,文件将被执行。 在脚本的情况下,这意味着启动一个新的解释器进程(由脚本顶部的#!行定义,或默认为/bin/sh ),并使用它来解释脚本。 定义的函数,variables设置和exit处理被限制在新的解释器进程中。