Настройка и работа в Linux
adb5321d

Перенаправление вывода


Zsh поддерживает такое же перенаправление вывода как и bash, но кроме этого он поддерживает множество расширений. Некоторые расширения работают только если заданы соответствующие настройки. Например, если не задана опция CLOBBER, то использование команды > для существующего файла приведет к возникновению ошибки и невыполнению команды. На этот случай, для практически всех команд существуют их модификации, которые не зависят от настроек. Например, для команды > существуют ее модификации >! и >|.

Для одновременного перенаправления стандартного вывода и стандартного потока сообщений об ошибках определены дополнительные команды >&, &>, >>&, &>> и их модификации со знаками | и ! (например, &>|). Эти команды соответственно переписывают и дополняют информацию в указанных файлах. Эти команды позволяют избавиться от неуклюжих конструкций вида 1>FNAME 2>&1.

Zsh также позволяет перенаправлять информацию более чем в один файл, аналогично использованию команды tee (это доступно только если определена переменная MULTIOS, что обычно указано по умолчанию). Кроме этого можно одновременно использовать перенаправление и конвейеры. Например, команда date >foo | cat запишет дату в файл foo и выведет ее в стандартный поток вывода. Если установлена переменная MULTIOS, то имя файла, указанное в качестве того, куда перенаправлять информацию, подвергается раскрытию шаблонов (globbing). Таким образом можно использовать команду : > * для обрезания всех файлов в текущем каталоге.

Множественное перенаправление также работает и при вводе информации, позволяя заменять конструкции вида cat foo fubar | sort на конструкции sort <foo <fubar или даже sort <f{oo,ubar}. Zsh даже позволяет использовать перенаправление без указания команды. Если не установлена переменная NULLCMD, то при таком использовании будет возникать ошибка. Но если установлена переменная NULLCMD, или READNULLCMD (она имеет преимущество над NULLCMD), то эти команды будут использоваться для обработки данных. По умолчанию NULLCMD имеет значением команду cat, а READNULLCMD значением команду more. Таким образом команда < file приведет к показу указанного файла.



Содержание раздела