11

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

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

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

4 ответа4

48

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

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

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

command >> filename

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


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

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

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

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

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

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

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

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

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

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

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

31

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

7

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

Стандартный вывод (не ошибки) команды перед >> будет добавлен в конец имени файла.

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

Fred
Barney

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

Fred
Barney
Dino
-2

Опять же, если вы делаете

> somefile.txt

Все содержимое файла будет очищено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .