“>> 文件命令”有什么作用,它与“命令>>文件”有什么不同?

Gre*_*ine 6 bash redirection ordering command-line

从这个拿起高度投票评论什么``>>意味着终端命令?

“程序之前”是什么意思?显然是命令,但重定向也可以写在前面,即>> file command

我不记得见过这样的案例——尽管考虑到赞成票的数量,它们显然存在。我只见过并使用过格式的重定向命令

command >> file
Run Code Online (Sandbox Code Playgroud)

当使用>>及其同类(即2>2>&1等)。

你什么时候以及为什么要颠倒顺序?这是否意味着所有内容都stdout被重定向,而不仅仅是来自command?有谁有具体的例子吗?

我有一个谷歌,可以找到任何直接的例子。

Kam*_*ski 6

>> file command
这是否意味着所有内容都stdout被重定向,而不仅仅是来自命令?

这种重定向会影响一个简单的命令。来自man 1 bash

在执行命令之前,可以使用由 shell 解释的特殊符号重定向其输入和输出。[…] 以下重定向操作符可能出现在简单命令的任何位置之前或出现,也可能出现在命令之后。重定向按照它们出现的顺序进行处理,从左到右。

“下面的重定向经营者” [n]<word[n]>word[n]>>word等。

一个简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止。

控制操作符
执行控制功能的令牌。它是以下符号之一:
|| & && ; ;; ( ) | |&<newline>

这意味着以下命令是等效的:

echo Some text >> file
echo Some >> file text
echo >> file Some text
>> file echo Some text
Run Code Online (Sandbox Code Playgroud)

这个问题被标记为并且我引用了,man 1 bash但上述命令sh也适用。

命令行解析器需要在运行命令之前“提供”所有重定向(即去除了这些重定向的命令)。想想看,无论特定重定向在哪里,过程都是相同的。没有理由要求它在最后。


你什么时候以及为什么要颠倒顺序?

我不记得我想在中间进行重定向的情况。然而,有一个使用案例,在开始时进行输入重定向非常有用。考虑这个代码:

grep foo file | tail | …
Run Code Online (Sandbox Code Playgroud)

想象一下管道很长。它发布在超级用户上并解决了一些问题。您可以将其粘贴到您的控制台并运行它。如果您想附加到某个命令或管道中怎么办?例如你想得到:

my_custom_command | grep foo | tail | …
#                   ^^^^^^^^^^^^^^^^^^^ this is the part you'd be happy to paste
Run Code Online (Sandbox Code Playgroud)

您需要file从复制的命令中删除。出于这个原因,一些用户更喜欢发布这样的命令:

cat file | grep foo | tail | …
#          ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
#        ^^^^^^^^^^^^^^^^^^^^^ or even this
Run Code Online (Sandbox Code Playgroud)

在其他情况下,使用cat. 有人会说它仍然是,无论情况如何。怎么样:

< file grep foo | tail | …
#      ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
Run Code Online (Sandbox Code Playgroud)

没有cat 一个方便的形式!