如何保存和还原所有外壳程序选项,包括errexit
我已经在各种堆栈交换站点和UNIX帮助论坛上通读了许多有关如何修改Shell选项然后恢复它们的问题-我在这里找到的最全面的解决方法是如何“撤消” set -x`? 在收到的智慧似乎是要么保存过的结果set +o或shopt -po再eval后来恢复到以前的设置。 但是,在我自己使用bash 3.x和4.x进行的测试中,errexit执行命令替换时未正确保存该选项。 这是显示问题的示例脚本: set -o errexit set -o nounset echo "LOCAL SETTINGS:" set +o OLDOPTS=$(set +o) echo echo "SAVED SETTINGS:" echo "$OLDOPTS" 和输出(我修剪掉了一些不相关的变量): LOCAL SETTINGS: set -o errexit set -o nounset SAVED SETTINGS: set +o errexit set -o nounset 这似乎非常危险。errexit如果有任何命令失败,我编写的大多数脚本都会停止执行。我只是在其中一个脚本中发现了一个由此引起的错误,该错误原本应该errexit在最后恢复,但此功能将覆盖它,并在脚本持续时间内将其设置为默认关闭状态。 我想做的是编写可以根据需要设置选项的函数,然后在退出之前正确还原所有选项。但是,似乎在命令替换调用的子外壳中,errexit是不会被继承的。 我不知道如何保存结果set +o而不使用命令替换或跳过FIFO箍。我可以阅读,$SHELLOPTS但不是可写或eval-able格式。 我知道一种替代方法是使用subshell函数,但是这给能够记录输出以及传递多个变量带来了很多麻烦。 …