>> 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
这个问题被标记为bash,我引用man 1 bash
了上面的命令,但是sh
也可以使用。
命令行解析器需要在运行命令之前“保留”所有重定向(即删除了这些重定向的命令)。考虑一下,无论特定的重定向在哪里,过程都是相同的。没有理由要求它在最后。
您何时以及为什么要撤销订单?
我不记得要在中间进行重定向的情况。但是,有一种使用情况,其中在开始时具有输入重定向非常有用。考虑以下代码:
grep foo file | tail | …
想象一下管道很长。它发布在超级用户上,并解决了一些问题。您可以将其粘贴到控制台并运行。如果您希望将其附加到某些命令或管道怎么办?例如,您想获得:
my_custom_command | grep foo | tail | …
# ^^^^^^^^^^^^^^^^^^^ this is the part you'd be happy to paste
您需要file
从复制的命令中删除。因此,一些用户喜欢发布这样的命令:
cat file | grep foo | tail | …
# ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
# ^^^^^^^^^^^^^^^^^^^^^ or even this
在其他情况下,这将完全无用cat
。不管情况如何,有人都会说仍然如此。怎么样:
< file grep foo | tail | …
# ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
不cat
,很方便!
echo Some text >file
和>file echo Some text
产生不同的结果