我认为这是某种 io 重定向,但它看起来与手册中的示例不同。通常,我们可以通过以下行重定向脚本的标准输出:
exec 1> /var/log/a.log
但是我在一个脚本中看到了这一行:
exec &> /var/log/a.log
这里的“&”是什么意思?是 stdout 还是 stderr?
谢谢,詹姆斯
答案1
你的猜测是正确的。
exec >filename
命令重定向stdout
到指定文件。这会将所有通常会转到该文件的命令输出发送stdout
到该文件。command &> filename
将命令stdout
和stderr
命令重定向至文件名。
实际上,command &>file
是另一种形式command > file 2>&1
(在版本 4 之前的 Bourne Shell 中不可用,在 Debian/Ubuntu 中使用的标准 shell Debian Almquist shell 中不可用):
这个角色的作用是什么&
?解释得很好这里:
在从 csh(C shell)派生的 shell 中,语法改为将
&
(&) 字符附加到重定向字符,从而实现类似的结果。这样做的原因是为了区分名为“1”的文件和 stdout,即cat file 2>1
vscat file 2>&1
。在第一种情况下,stderr 被重定向到名为“1”的文件,在第二种情况下,stderr 被重定向到 stdout。
在这里阅读有关 I/O 重定向的更多信息:
http://www.tldp.org/LDP/abs/html/io-redirection.html
http://www.tldp.org/LDP/intro-linux/html/sect_05_02.html#sect_05_02_01