我编写了一个 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 的文本终端)的值是多少?
谢谢!
您可以使用两种方法...
方法一
在脚本的一开始将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)
这样您就不必显式重定向每个命令输出...