Какое правильное имя для команды «>»

38

Я пытался найти способ передать некоторый текст в файл, не переписывая то, что там уже было, используя >команду, и я понял, что не знаю, как это называется. Поиск стрелка вправо или правого шеврон или более команд не обнаруживалось ничего. Я всегда просто называл это пассивом .

blarg
источник

Ответы:

53

>это не команда, а перенаправление дескриптора файла. Это означает, что оболочка анализирует это назначение, удаляет его из командной строки и изменяет среду для нового процесса, в котором оно запущено. Новый процесс не замечает эту часть командной строки. Вот почему вы можете поместить это везде: в начале, в конце или между ними.

Ищите REDIRECTIONблок в man bash.

Для добавления к существующему файлу вам необходимо использовать >>.

Хауке Лагинг
источник
Если опция noclobberустановлена, то >|переопределит и разрешит клоберинг файла.
BSD
30

>является оператором перенаправления . Обратите внимание, что использование >перенаправления на обычный файл перезапишет то, что уже есть, если не установлен noclobber . >>добавит в конец файла.

Джош Джолли
источник
И он не перезаписывается, если noclobberбыл установлен (bash).
Хауке Лагинг
Обновил мой ответ, спасибо за разъяснения.
Джош Джолли
5
@HaukeLaging noclobber- это не просто башизм. Это часть POSIX
Кодзиро
6

Как ответили другие люди, >это не команда, а скорее оператор перенаправления. Тем не менее, термин «оператор перенаправления» конкретно не относится к >, но ряд различных возможных операторов перенаправления. На dashстранице man перечислены следующие операторы перенаправления:

 < > >| << >> <& >& <<- <>

Я не уверен, что есть правильное индивидуальное имя для каждого. Возможно, если вы покопаетесь в старых руководствах по оболочке, вы найдете что-то интересное. Этот источник , правильный или неправильный, определенно имеет право назвать некоторые из них:

>  - 'output redirection operator'
<  - 'input redirection operator'
>> - 'output append operator'

Но и:

2> - 'standard error redirection operator'

Однако я не думаю, что это действительно правильно, так как 2технически это аргумент, а не часть оператора.

Краткий справочник (на случай, если вы не узнаете ничего из вышеперечисленного):

>   - redirect output stream to a file, eg >somefile (for stdout) or 2>somefile
>|  - as above but overwrite the file even if the noclobber shell option is set
>>  - append output stream to file
<   - redirect input stream from file, n defaults to 0 for stdin
<>  - open file for reading and writing on stdin
>&  - redirect output stream to another stream (eg >&1) or close with - (eg 2>&-)
<<  - here document - see http://en.wikipedia.org/wiki/Here_document
<<- - here document with leading tabs removed.

У bashвас также есть:

<<< - here string, a one line here file. Eg <<<"foo bar"
Graeme
источник
Очень хороший быстрый список ссылок, но не <<-удаляет лидирующие символы табуляции и пробелы?
иконоборчество
@iconoclast, нет, определенно только вкладки.
Грэм,
0

> перенаправляет вывод в файл (или устройство), перезаписывая все, что там уже существует

>> перенаправляет вывод в файл (или устройство), добавляя к чему-либо уже существующему

< направляет данные из файла (или устройства) в программу или устройство

<< здесь документ

ле
источник
1
<<это документ здесь
Graeme
1
@ Грэм, я отредактировал свой ответ. Спасибо за помощь
Les