通过抑制 stdout bash 脚本创建安静模式

RD7*_*RD7 3 bash

我编写了一个 bash 脚本,该脚本通过命令行开关打开了一些选项。我想为用户创建选项以在安静模式下运行此脚本,这意味着 - 所有标准输出都将被重定向到 /dev/null。如果 -q 开关打开,我使用一个更改为 /dev/null 的变量:

while getopts ":qhb:kape" opt; do
    case $opt in
       q)
        output=/dev/null
        ;;
Run Code Online (Sandbox Code Playgroud)

后来我将 acho mesagges 重定向到输出:

echo "something" 1>>$output
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在没有发送 -q 开关的情况下初始化上面的这个 var 输出。标准标准输出目的地(通常称为 sctipt 的文本终端)的值是多少?

谢谢!

mau*_*uro 5

您可以使用两种方法...

方法一

在脚本的一开始将output变量设置为其默认值。例如:

output=/dev/stdout
Run Code Online (Sandbox Code Playgroud)

然后,如果-q开关已被使用,则通过设置“覆盖”此默认值output=/dev/null

此方法意味着脚本中的每条指令都将其输出重定向到 ${output}。

方法二

使用 exec... 在脚本的开头:

exec 6>&1 # saves stdout
Run Code Online (Sandbox Code Playgroud)

然后,如果-q选择了选项:

exec > /dev/null  # redirect stdout to /dev/null
Run Code Online (Sandbox Code Playgroud)

而且,最后...

exec 1>&6 6>&- # restore stdout
Run Code Online (Sandbox Code Playgroud)

这样您就不必显式重定向每个命令输出...