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\n
是echo
命令的实际输出,由您的 shell 显示,foo
后跟换行符。)
基本上任何写入命令行的内容都使用标准输出。还有另一个称为“stderr”的描述符,通常用于错误消息。它也会像标准输出一样打印,所以有时它们可以穿插。还有一个用于输入的标准输入描述符。有关更多信息,请参阅这篇文章。
您始终可以将stdout重定向到文件描述符,您可以使用以下运算符之一执行此操作:
>
重定向到文件描述符。如果文件不存在,它会创建文件,或者,如果文件已经存在,则在写入之前截断文件。因此,该文件将被标准输出覆盖。
>>
附加到文件描述符。如果文件不存在,它将创建该文件。
您还可以使用2>
或2>>
以类似方式重定向 stderr 。或者您可以将 stderr 和 stdout 合并到一个文件中:2>&1
这样做。有关重定向的更多信息和更多示例,您可以阅读这个小教程。
通常,您可能想尝试Explainshell.com,它会为您提供有关特定 shell 命令的视觉指导和信息。
小智 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)