Что означает >> в терминальной команде?
Я наткнулся на команду только сейчас, приведенную ниже -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Из того, что я могу догадаться, он, вероятно, используется для фиксации изменений в.bash_profile, но для чего именно он используется?
4 ответа
Перенаправляет стандартный вывод программы до >>
и добавляет его в указанный файл после.
Краткий ответ - что делает >>
делать?
С >>
, вы добавляете вывод команды в файл.
Ваш пример команды состоит из нескольких частей, в основном:
команда >> имя файла
Так что выход 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, который даст вам визуальное руководство и информацию о конкретной команде оболочки.
Для людей TLDR, которым просто нравится видеть пример;
Стандартный вывод (не ошибки) команды перед >> будет добавлен в конец имени файла.
Так что если файл "flintstones.txt" содержит;
Fred
Barney
echo Dino >> flintstones.txt
приведет к добавлению 'Dino' в конец файла;
Fred
Barney
Dino
Опять же, если вы делаете
> somefile.txt
Все содержимое файла будет очищено.