bash:使用变量存储stderr | stdout重定向

Modified on: Sat, 30 Jun 2018 06:10:30 +0800

有没有办法通过变量重定向stdout和stderr,比如在脚本中添加命令选项?

例如我有一个脚本:

#!/bin/bash -x
TEST=">/dev/null 2>&1"
OPT='-p -v'
mkdir $OPT 123/123/123 $TEST

我可以看到OPT被-p替换而没有任何问题,bash将其解释为选项。但重定向将解释为目录名称。

$ ./test.sh 
+ TEST='>/dev/null 2>&1'
+ OPT='-p -v'
+ mkdir -p -v 123/123/123 '>/dev/null' '2>&1'
mkdir: created directory `123/123'
mkdir: created directory `123/123/123'
mkdir: created directory `>/dev'
mkdir: created directory `>/dev/null'
mkdir: created directory `2>&1'

有没有办法说bash,$ VAR是重定向,而不是dirs名称。

PS。可能是我错误的方式,但我想从我的脚本中生成可选的详细或非详细输出。但是我甚至在非详细模式下也需要一些输出,因此我不能仅仅从我脚本中的一些命令重定向整个stdout和stderr。

最佳答案

另一种解决方案可能如下:

#!/bin/bash verbose=0 exec 3>&1 exec 4>&2 if ((verbose)); then echo "verbose=1" else echo "verbose=0" exec 1>/dev/null exec 2>/dev/null fi echo "this should be seen if verbose" echo "this should always be seen" 1>&3 2>&4

然后将1>&3 2>&4仅添加到您想要查看输出的命令。

作者:,enzotib

相关问答

添加新评论