终端命令中的“ >>”是什么意思?


14

我遇到了下面刚刚给出的命令-

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

据我所知,它可能用于提交.bash_profile中的更改,但是它的用途是什么?


26
只是为了让您知道将来需要改进的地方:man bash用相当正式的语言编写的代码,可能很难理解。另一方面,该短语bash >>在Google中返回的有用链接很少。我们确实想在不依赖Google的情况下积累知识;因此,即使是具有易于搜索答案的问题也可能适用。但是,您既没有立即提供答案(请参阅我可以回答我自己的问题吗?),也没有指出现有资源(您可能需要帮助来理解),这一事实表明缺乏研究。
卡米尔Maciorowski

5
有关命令行重定向运算符的详细概述,请参见unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Answers:


31

它先重定向程序的标准输出,然后再将>>其附加到给定文件。


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

一个例子。在Ubuntu 18.04上,我可以键入“ apt search rust >> x”。“ apt search rust”部分在可用的软件包中搜索术语rust,然后将其发送到standard输出(在这种情况下,通常为终端)。但是,“ >> x”表示将输出重定向到文件“ x”的末尾。如果我只想替换文件,则只需要一个“>”即可。
NomadMaker

@rexkogitans如果您想让您的代码难以读取,甚至可以在命令中间进行。echo a b >> c d将追加a b d到名为的文件中c
kasperd

@kasperd您还可以按任意顺序在它们之间分散stdin重定向。
rexkogitans

48

简短答案-怎么>>办?

使用>>,您可以将命令的输出附加到文件中。

您的示例命令基本上由几部分组成:

命令 >> 文件名

因此的输出command将附加到filename


在特定情况下会发生什么echo

在您的特定情况下,echo "…"命令将其输入参数输出到“ stdout”,即所谓的“标准输出描述符”。输入参数to echo后面跟一个换行符(\n),以便您可以换行。

在这里,“标准输出描述符”只不过是您在执行命令时在shell中显示的输出流。(也就是说,当您键入echo foo并按Enter键时,foo\necho命令的实际输出,将在外壳程序中显示,foo后跟换行符。)

基本上任何写入命令行的内容都使用stdout。还有另一个称为“ stderr”的描述符,通常用于错误消息。它还将像标准输出一样打印,因此有时可能会散布它们。并且有一个stdin描述符用于输入。有关更多信息,请参见本文

如何在Shell中重定向输出?

您始终可以 stdout 重定向到文件描述符,可以使用以下操作符之一进行操作:

  • >重定向到文件描述符。如果文件不存在,则创建该文件;如果文件已经存在,则创建该文件,然后在写入之前将其截断。因此,该文件将被stdout覆盖。

  • >>追加到文件描述符。如果文件不存在,它将创建文件。

您也可以使用2>2>>类似方式重定向stderr 。或者,您可以将stderr和stdout组合到一个文件中:2>&1执行此操作。有关重定向的更多信息和更多示例,您可以阅读此小型教程

如何弄清楚特定的Shell代码是什么意思?

通常,您可能需要尝试explainshell.com,它将为您提供视觉指导和有关特定shell命令的信息。


7

对于喜欢看例子的TLDR人们;

>>之前命令的标准输出(不是错误)将添加到以该文件命名的文件的末尾。

因此,如果文件“ flintstones.txt”包含;

Fred
Barney

echo Dino >> flintstones.txt 将导致“ Dino”被添加到文件末尾;

Fred
Barney
Dino

我建议您添加一个示例,echo Dino > flintstones.txt以显示其内容,只需Dino使用单个右箭头即可。
JakeGould

-2

同样,如果你这样做

> somefile.txt

文件的全部内容将被清除。


为什么要复制其他答案?
多托

@Toto我认为他没有。它似乎是附加的,非常有价值。
Volker Siegel '18

@Toto糟糕!仔细观察,实际上并非如此。甚至在多个方面都是错误的。奇怪-他是新来的,但在其他地方很活跃-所以可能不只是拖钓。
Volker Siegel '18

2
@VolkerSiegel:> file清除文件,但>> file不执行任何操作。
多托

但这并不能以任何方式回答这个问题,应该是一个评论
phuclv '18
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.