C Shell 变体和 Bourne Shell 变体之间有什么区别?
我必须安装一个科学软件,在安装过程中我必须写入
./configure >& config.out & ## C Shell variants
./configure > config.out 2>&1 & ## Bourne Shell variants
只是对此有个想法。
答案1
C shell(例如csh
、tcsh
)和 Bourne shell(例如sh
、bash
)是两个 shell 家族。这两者在语法和各种操作的实现上存在差异。
您展示的示例是这两个系列如何处理文件描述符的重定向。 这两个命令都将 STDERR(文件描述符 2)重定向到 STDOUT(文件描述符 1),将 STDOUT 发送到文件,因此所有 STDOUT 和 STDERR 都被重定向到文件。最后config.out
还将命令发送到后台。&
从历史上看,C shell>&
曾经同时重定向 STDOUT 和 STDERR,而 Bourne shell 则使用两次重定向来实现这一点,首先将 STDOUT 发送到文件,然后将 STDERR 发送到 STDOUT 所在的位置,即文件。
请注意,出于可移植性考虑,上述讨论适用于所有 C shell 和 Bourne shell 系列 shell。但是现在,很多事情都发生了变化,为了提高各种 shell 的新实现的效率,这些事情都进行了修改。例如,在继承自 Bourne shell 的bash
(或zsh
/ ) 中,您可以使用以下方式执行上述操作:ksh
&>
./configure &> config.out &
正如您所见,它实际上是csh
语法的相反部分>&
。