正确的语法以避免 bash '不明确的重定向'消息

正确的语法以避免 bash '不明确的重定向'消息

我正在尝试执行一个命令,该命令累积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

您可以将&1and理解&2为“文件名”,指的是 stdout 和 stderr 的文件描述符。现在您会发现&文件名前面没有意义。

总之,语法是n>&mn>filewheren是要重定向的文件描述符(如果未指定,则表示标准输出,n=1),并且在右侧,您可以重定向到文件描述符m,或名称为 的文件filem可以是一个数字,或者-这意味着文件描述符应该是关闭而不是重定向(重定向“无处”)。

还有一种特殊的语法可以将 stdout 和 stderr 重定向到同一位置,但这就是&>.它只会让你感到困惑,因为它不属于常规语法 - 它是一个实际上同时执行两个重定向的快捷方式。

相关内容