我刚才遇到了下面给出的命令 -
$ 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
该文件的全部内容将被清除。