Я наткнулся на команду только сейчас, приведенную ниже -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Из того, что я могу догадаться, он, вероятно, используется для фиксации изменений в .bash_profile, но для чего именно он используется?
Я наткнулся на команду только сейчас, приведенную ниже -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Из того, что я могу догадаться, он, вероятно, используется для фиксации изменений в .bash_profile, но для чего именно он используется?
man bash
написано довольно формальным языком, это может быть трудно понять. С другой стороны, эта фразаbash >>
возвращает несколько полезных ссылок в Google. Это правда, что мы хотим собирать знания, не полагаясь на Google; по этой причине может подойти даже вопрос с легко доступным для поиска ответом. Однако тот факт, что вы не предоставили ответ сразу (см. « Могу ли я ответить на свой вопрос?» ) И не указал на существующие ресурсы (которые вам, возможно, нужна помощь, чтобы понять), указывает на отсутствие исследований.Ответы:
Он перенаправляет стандартный вывод программы до
>>
и добавляет его в указанный файл после.источник
>> file command
echo a b >> c d
добавитa b d
в файл с именемc
.Краткий ответ - что делает
>>
?С помощью
>>
вы добавляете вывод команды в файл.Ваш пример команды состоит из нескольких частей, в основном:
Таким образом, результат
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" содержит;
echo Dino >> flintstones.txt
приведет к добавлению 'Dino' в конец файла;источник
echo Dino > flintstones.txt
чтобы показать, что его содержимое будет просто,Dino
если сделать это с помощью одной стрелки вправо.Опять же, если вы делаете
Все содержимое файла будет очищено.
источник
> file
очищает файл, но>> file
ничего не делает.