shell 脚本中“exec &>/var/log/a.log”的准确含义是什么?

shell 脚本中“exec &>/var/log/a.log”的准确含义是什么?

我认为这是某种 io 重定向,但它看起来与手册中的示例不同。通常,我们可以通过以下行重定向脚本的标准输出:

exec 1> /var/log/a.log

但是我在一个脚本中看到了这一行:

exec &> /var/log/a.log

这里的“&”是什么意思?是 stdout 还是 stderr?

谢谢,詹姆斯

答案1

你的猜测是正确的。

  • exec >filename命令重定向stdout到指定文件。这会将所有通常会转到该文件的命令输出发送stdout到该文件。
  • command &> filename将命令stdoutstderr命令重定向至文件名。

实际上,command &>file是另一种形式command > file 2>&1(在版本 4 之前的 Bourne Shell 中不可用,在 Debian/Ubuntu 中使用的标准 shell Debian Almquist shell 中不可用):

这个角色的作用是什么&?解释得很好这里

在从 csh(C shell)派生的 shell 中,语法改为将&(&) 字符附加到重定向字符,从而实现类似的结果。这样做的原因是为了区分名为“1”的文件和 stdout,即cat file 2>1vs cat 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

相关内容