$ sh < foo > bar 这个语句是问题

$ sh < foo > bar 这个语句是问题

下面的命令是做什么的?我是新人,还在学习。

$ sh < foo > bar

如何逐步解释它,以便我可以清楚地理解更多这样的问题。

答案1

让我们来分解一下。该命令分为三部分:

sh

sh是要运行的程序的名称,在本例中为sh.

< foo

<simbol 表示后面的单词是文件名,并命令 shell(执行命令的 shell,与 sh 无关,被调用的程序,恰好是 shell)加入到标准输入foo在本例中,程序将其名称跟随在符号后面的文件的内容。

> bar

>符号命令 shell 将正在执行的程序的标准输出加入到文件中bar

这些重定向路径是在程序开始执行之前设置的。

因此,整个命令sh < foo > bar在 shell 上运行时。使程序sh从文件读取命令foo并将其输出存储在文件中bar。如果该文件foo不存在,则会发生错误。 shell 的行为取决于文件是否存在,由您使用的 shell 的选项bar决定。noclobber

答案2

一般来说,

$ utility <input >output

将导致utility被执行标准输入流连接到文件input及其标准输出流连接到文件output

该行开头$的是 shell 提示符(您不会键入它)。

对于shshell 命令解释器,这将导致sh从输入文件(foo在您的情况下)读取并执行 shell 命令,并将任何输出写入输出文件(bar在您的情况下)。诊断消息(错误和警告)仍将显示在终端上,因为这些消息通常写入标准错误流,您提到的命令行不会重定向到任何特定的地方。

您提到的命令或多或少具有相同的效果

$ sh foo >bar

sincesh能够从命令行上提到的文件中读取,并且只有在没有提到文件的情况下才会从标准输入流中读取。

相关内容