C Shell 变体和 Bourne Shell 变体

C Shell 变体和 Bourne Shell 变体

C Shell 变体和 Bourne Shell 变体之间有什么区别?

我必须安装一个科学软件,在安装过程中我必须写入

./configure >& config.out & ## C Shell variants

./configure > config.out 2>&1 & ## Bourne Shell variants

只是对此有个想法。

答案1

C shell(例如cshtcsh)和 Bourne shell(例如shbash)是两个 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语法的相反部分>&

相关内容