“ >>文件命令”有什么作用,与“命令>>文件”有什么区别?


6

从这个备受赞誉的评论中摘录终端命令中的>> >>是什么意思?

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

我不记得曾见过这种情况-尽管考虑到大量的支持,它们显然存在。我只看过并使用过以下格式的重定向命令

command >> file

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

您何时以及为什么要撤销订单?这是否意味着所有stdout重定向,而不仅仅是重定向command?有没有人有具体的例子?

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

Answers:


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

这个问题被标记为,我引用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 很方便!


注意,在Windows echo Some text >file>file echo Some text产生不同的结果
phuclv

3

说明

理解I / O重定向运算符如何工作的关键在于,要记住您正在一个不断输出到STDOUT或STDERR(主要是输入的命令)的shell中工作。

>>不在乎输出如何发生,而只是在输出发生时才可以将其附加到紧随其后的文件中。同样重要的是要记住,重定向操作符不会参与您的命令。您可以输入以下内容echo hello >> newfile this is my output并进一步测试,cat newfile您将看到:“你好,这是我的输出”。

在这种特殊情况下,命令的顺序与append运算符(>>)结合使用不一定是要注意的重要事项。相反,请注意命令的结果,如上面Kamil的评论所^^所不。只要在您的shell中打印出没有错误的内容,>>就可以完成它。

echo命令的工作是打印到标准输出(STDOUT)。单独尝试,您的输出将显示新行。如果您包括>> file在混合中,则将在该换行符上显示的任何内容附加到该文件中。但是,此顺序重要。要追加的文件必须直接接替操作员。

范例说明

关于具体示例,我想说您将找不到很多示例,因为与从一个来源指向另一个来源的几个箭头相比,切换顺序被认为不那么直观/可读。此外,当您编写冗长的Shell脚本时,甚至更需要直观和易读的代码。


如果您希望对此有更深入的了解,则可以开始学习文件描述符(STDIN,STDOUT,STDERR)以及Unix 系统调用的工作方式。所有这些都可以看作是进入Unix系统编程的窗口以及Unix / Linux在更深层次上如何工作的窗口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.