Gre*_*ine 6 bash redirection ordering command-line
从这个拿起高度投票评论到什么``>>意味着终端命令?:
“程序之前”是什么意思?显然是命令,但重定向也可以写在前面,即
>> file command
我不记得见过这样的案例——尽管考虑到赞成票的数量,它们显然存在。我只见过并使用过格式的重定向命令
command >> file
Run Code Online (Sandbox Code Playgroud)
当使用>>及其同类(即2>,2>&1等)。
你什么时候以及为什么要颠倒顺序?这是否意味着所有内容都stdout被重定向,而不仅仅是来自command?有谁有具体的例子吗?
我有一个谷歌,可以找到任何直接的例子。
>> 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)
这个问题被标记为bash并且我引用了,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 和一个方便的形式!
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |