Shell命令以“>”开头

时间:2012-04-17 05:43:57

标签: bash shell

我最近遇到了一个看起来像这样的shell命令:“> outfile< infile cat”,它似乎在功能上等同于“cat infile> outfile”。就此而言,一般形式似乎是“> outfile< infile命令arg1 ... argN”变为“命令arg1 ... argN infile> outfile”。

无论如何,我想知道是否有人可以详细说明领先的“>”实现这种效果,如果有任何实际用途。

5 个答案:

答案 0 :(得分:6)

"Bash Reference Manual"说明了有关重定向运算符的内容:

  

以下重定向运算符可以在简单命令之前或出现在任何位置,也可以跟随命令。

因此以下命令都是等效的:

ls -al > listing.txt
> listing.txt ls -al
ls > listing.txt -al

虽然我猜第一种是最常见的形式。

请注意,重定向的相对顺序很重要,因此,如果您将一个文件描述符重定向到另一个文件描述符,则以下内容会有所不同:

ls > listing.txt 2>&1   # both stdout and stderr go in to listing.txt

ls 2>&1 > listing.txt   # only stdout goes to listing.txt, because stderr was made
                        #    a copy of stdout before the redirection of stdout

答案 1 :(得分:4)

“>”只需将命令的输出重定向到作为下一个参数给出的文件。典型的用法是在命令的末尾附加它,但它可以在任何地方。所以:

> outfile <command>相当于<command> > outfile。输入重定向也是如此。

请注意,在上面的示例中,<command>并不是一些奇怪的语法 - 它只是替换了任意命令。

答案 2 :(得分:1)

等价物不是:

cat infile > outfile

相反,它是

cat < infile > outfile

(就猫而言,cat infilecat <infile相同)

一旦你看到它,原始命令似乎更直接。

答案 3 :(得分:1)

一个注意事项。这是因为你实际上可以写这个

< file command

它使无用的猫更加不可原谅:

cat file | command

也就是说,即使由于某种原因你希望文件在语法的左边,你仍然不需要cat

答案 4 :(得分:0)

前导大于号(&gt;)用于重定向输出。默认情况下,它将重定向STDOUT。在这种情况下,STDOUT为空,因此创建了一个新的空文件(与touch output类似的效果)。

您也可以使用此命令样式清空现有文件,即

    $ echo FOO >/tmp/foo
    $ ls -l /tmp/foo
    -rw-r--r--  1 flah  wheel  4 Apr 17 01:49 /tmp/foo
    $ > /tmp/foo
    $ ls -l /tmp/foo
    -rw-r--r--  1 flah  wheel  0 Apr 17 01:49 /tmp/foo
    $ 

有关详细信息,请参阅bash手册页的“重定向”部分。