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

mon*_*ter 14 terminal bash command-line .bash-profile

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

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

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

slh*_*hck 48

简短的回答 - 有什么作用>>

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

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

命令>>文件名

所以输出command将被附加到filename.


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

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

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

基本上任何写入命令行的内容都使用标准输出。还有另一个称为“stderr”的描述符,通常用于错误消息。它也会像标准输出一样打印,所以有时它们可​​以穿插。还有一个用于输入的标准输入描述符。有关更多信息,请参阅这篇文章

你如何在shell中重定向输出?

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

  • >重定向到文件描述符。如果文件不存在,它会创建文件,或者,如果文件已经存在,则在写入之前截断文件。因此,该文件将被标准输出覆盖。

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

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

我怎样才能弄清楚一段特定的 shell 代码意味着什么?

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


小智 31

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

  • “程序之前”是什么意思?显然是命令,但重定向也可以写在前面,即`>>文件命令` (28认同)

小智 7

对于只喜欢看示例的TLDR人员;

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

所以如果文件“flintstones.txt”包含;

Fred
Barney
Run Code Online (Sandbox Code Playgroud)

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

Fred
Barney
Dino
Run Code Online (Sandbox Code Playgroud)