我最近遇到了一个看起来像这样的shell命令:“> outfile< infile cat”,它似乎在功能上等同于“cat infile> outfile”。就此而言,一般形式似乎是“> outfile< infile命令arg1 ... argN”变为“命令arg1 ... argN infile> outfile”。
无论如何,我想知道是否有人可以详细说明领先的“>”实现这种效果,如果有任何实际用途。
答案 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 infile
与cat <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手册页的“重定向”部分。