Что означает `>>` в команде терминала?

Jun 28 2018

Я наткнулся на команду, только что приведенную ниже -

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

Насколько я могу догадаться, он, вероятно, используется для фиксации изменений в .bash_profile, но для чего именно он используется?

Ответы

31 kai-dj Jun 28 2018 at 12:06

Он перенаправляет стандартный вывод программы до >>и добавляет его в указанный файл после.

48 slhck Jun 28 2018 at 14:13

Короткий ответ - что >>делать?

С помощью >>вы добавляете вывод команды в файл.

Ваш пример команды состоит из нескольких частей, в основном:

команда >> имя файла

Таким образом, результат commandбудет добавлен к filename.


Что происходит в конкретном случае echo?

В вашем конкретном случае echo "…"команда выводит свои входные аргументы в «stdout», который является так называемым «дескриптором стандартного вывода». За входными аргументами для echoследует символ новой строки ( \n), так что вы получаете разрыв строки.

Здесь «стандартный дескриптор вывода» - это не что иное, как поток вывода, который отображается в вашей оболочке, когда вы выполняете команду. (То есть, когда вы вводите echo fooи нажимаете Enter, foo\nэто фактический результат echoкоманды, который отображается вашей оболочкой fooс новой строкой.)

В основном все, что записывает в вашу командную строку, использует stdout. Существует также другой дескриптор, называемый «stderr», который обычно используется для сообщений об ошибках. Он также будет напечатан как стандартный вывод, поэтому иногда они могут перемежаться. И есть дескриптор stdin, который используется для ввода. См. Эту статью для получения дополнительной информации.

Как вы перенаправляете вывод в оболочке?

Вы всегда можете перенаправить stdout в файловый дескриптор, что можно сделать с помощью одного из следующих операторов:

  • >перенаправляет на файловый дескриптор. Он создает файл, если он не существует, или, если он уже существует, обрезает файл перед записью. Таким образом, файл будет перезаписан с помощью stdout.

  • >>добавляется к файловому дескриптору. Он создает файл, если он не существует.

Вы также можете перенаправить stderr с помощью 2>или 2>>аналогичным образом. Или вы можете объединить stderr и stdout в один файл: 2>&1делает это. Для получения дополнительной информации о перенаправлении и некоторых других примеров вы можете прочитать это небольшое руководство .

Как я могу понять, что означает конкретный фрагмент кода оболочки?

Как правило, вы можете попробовать найти на сайте openshell.com , который предоставит вам визуальные инструкции и информацию о конкретной команде оболочки.

7 MarkBoyce Jun 29 2018 at 09:58

Для людей TLDR, которым просто нравится видеть пример;

Стандартный вывод (не ошибки) команды до символа >> будет добавлен в конец файла, названного в его честь.

Итак, если файл "flintstones.txt" содержит;

Fred
Barney

echo Dino >> flintstones.txt приведет к добавлению «Дино» в конец файла;

Fred
Barney
Dino