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

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

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

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

据我猜测,它可能用于提交 .bash_profile 中的更改,但它究竟用于什么呢?

答案1

它将程序的标准输出重定向到之前>>并将其附加到之后的给定文件中。

答案2

简短回答——做什么>>

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

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

命令>>文件名

因此 的输出command将被附加到filename


在具体情况下会发生什么echo

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

这里的“标准输出描述符”只不过是执行命令时在 shell 中显示的输出流。(也就是说,当您键入echo foo并按下 Enter 时,foo\n是命令的实际输出echo,shell 会将其显示为foo后面跟着一个换行符。)

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

如何在 shell 中重定向输出?

您可以随时重定向stdout 到文件描述符,你可以用下列其中一个运算符来执行此操作:

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

  • >>附加到文件描述符。如果文件不存在,则创建文件。

您还可以使用2>2>>以类似的方式重定向 stderr。或者您可以将 stderr 和 stdout 合并到一个文件中:2>&1这样做。有关重定向的更多信息和更多示例,您可以阅读这个小教程

我怎样才能弄清楚特定一段 shell 代码的含义?

一般来说,你可能想尝试explainshell.com,它将为您提供有关特定 shell 命令的视觉指导和信息。

答案3

为了结论只喜欢看例子的人;

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

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

Fred
Barney

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

Fred
Barney
Dino

答案4

再次,如果你这样做

> somefile.txt

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

相关内容