我正在编写一个shell脚本,用于重定向程序的STDOUT
和STDERR
输出。重定向的目的地是一个变量。通常,目标是一个文件,在这种情况下,以下工作正常。支持FD号码和文件名参数化重定向
simple_redirect()
{
myfunc=$1
myfile=$2
myfunc &>myfile
}
simple_redirect ls text.txt
不过,有时我不想重定向到一个文件,但是要打印到STDOUT
像正常。 如果myfile
是&1
为STDOUT
,我得到以下错误: $myfile: ambiguous redirect
如果我运行命令 ls &>&1
,我看到:parse error near '&'
。
我想通过分别重定向STDOUT
和STDERR
来解决这个问题:ls 1>&1 2>&1
。不过,我更喜欢这个选项,因为我不得不重复使用变量,而且它的可读性较差。有没有更简单的方法来做到这一点?
哪**精确**壳?不只是哪个shell,而是哪个* release *? POSIX根本不指定'&>',并且在bash重定向的右侧使用具有FD编号的变量的能力是最近的(4.x系列)扩展。 –
顺便说一句,'&>&1'做的是'2>&1'不?根据定义,'1&1'完全是多余的,毕竟stdout * already *支持标准输出。 –
也许你的意思是'&>“$ myfile”',顺便说一下?这与'&> myfile'完全不同。 –