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