使用 exec 重定向某些输出的安全方法

使用 exec 重定向某些输出的安全方法

我有一个相当“吵闹”的脚本。我被要求清理输出,以便脚本的大部分输出都进入日志文件,并且用户只看到启动消息和脚本结束时的消息。为此,我使用这样的 exec:

#! /bin/bash
echo "Welcome! set up has begun, this may take a few moments..."
exec 3>&1 4>&2 1>> script.log 2>&1
# Call a bunch of other programs - stderr and stdout must
# be written to a log file to diagnose programs, but nothing out the console...
exec 1>&3 2>&4
echo "Your system is ready to use!"

不过,我担心如果该脚本的记录部分内的程序之一失败(我对这些程序没有太多控制权)并导致主脚本失败,会发生什么。如果该行exec 1>&3 2>&4无法执行,我担心用户最终可能会得到 stderr 和 stdout 重定向,从而使他们的终端无法使用!有没有更安全的方法来处理这个问题?

答案1

如果脚本作为单独的程序运行,则任何重定向都不会在进程结束后继续存在;它们仅适用于隐式的/bin/bash yourscript.sh,而不适用于用户正在运行的交互式 shell。这是正常情况。可能导致问题的唯一方法是使用或类似方式读取脚本source yourscript.sh,而您通常不应该这样做。

相关内容