我正在尝试执行一个命令,该命令累积stdout
到现有文件中,并使用下面的命令将错误消息发送到另一个文件。
commmand >> /home/user/accumulate_output.log 2>& /home/user/error.log
这给出了这个错误消息
bash: /home/user/error.log :ambiguous redirect
什么是正确的语法?
答案1
2>&1
意味着将错误流重定向到标准输出和&
字符本身并没有多大意义:它正在等待您提供文件描述符的数量,但您正在给他一个文件名。您想要重定向到文件,而不是编号的文件描述符,所以
commmand >> /home/user/accumulate_output.log 2>/home/user/error.log
您可以将&1
and理解&2
为“文件名”,指的是 stdout 和 stderr 的文件描述符。现在您会发现&
文件名前面没有意义。
总之,语法是n>&m
或n>file
wheren
是要重定向的文件描述符(如果未指定,则表示标准输出,n=1
),并且在右侧,您可以重定向到文件描述符m
,或名称为 的文件file
。m
可以是一个数字,或者-
这意味着文件描述符应该是关闭而不是重定向(重定向“无处”)。
还有一种特殊的语法可以将 stdout 和 stderr 重定向到同一位置,但这就是&>
.它只会让你感到困惑,因为它不属于常规语法 - 它是一个实际上同时执行两个重定向的快捷方式。