cat < file
печатает содержимое файла на стандартный вывод
cat > file
читает стандартный ввод до тех пор, пока не будет обнаружен знак Ctrl+, Dа введенный текст записывается в файл .
cat <> file
по крайней мере в моей версии Bash, печатает содержимое файла счастливо (без ошибок), но не изменяет файл и не обновляет метку времени изменения.
Как стандарт Bash оправдывает кажущееся игнорирование >
в третьем утверждении - и, что более важно, он что- то делает ?
4<>file
) полезно, и я полагаю, что значение 0 по умолчанию так же хорошо, как и любое, когда вы его опускаете. Чтение со стандартного выхода не лучше.<>
В некоторых системах (например, в Linux) также полезно открывать именованные каналы без блокировки, пока другой процесс не откроет их для записи.<>
Оператор может быть полезен при написании приложения, которое работает с несколькими терминалами, и иногда хочет запустить оболочку. Эта оболочка, в свою очередь, не сможет запускать приложения, которые запускаются с обычного управляющего терминала, если она не сможет использовать<>
... такой как ... пейджерmore
, который читает из стандартной ошибки, чтобы получить свои команды, поэтому стандартный ввод и стандартный вывод оба доступны для их обычного использования.cat food | more - >/dev/tty03 2<>/dev/tty03
<> file
открывает файл (на файловый дескриптор 0 (стандартного ввода) по умолчанию, как<
) в чтение + запись режиме без усечения и создания файла , если он не существует заранее .Это соответствует
O_RDWR|O_CREAT
флагам, переданнымopen()
системному вызову. В отличие от этого<
естьO_RDONLY
и>
естьO_WRONLY|O_CREAT|O_TRUNC
и>>
O_WRONLY|O_CREAT|O_APPEND
.Возможность записи в stdin не часто полезна, поскольку приложения обычно не пишут в их stdin. Приложения обычно не ожидают чтения и записи в файловом дескрипторе, который они получают при запуске; они обычно читают из stdin (или файлового дескриптора, который они открывают сами) и записывают в stdout или stderr (или файловый дескриптор, который они открывают сами).
<>
может иметь свое использование:cat <> file
более,cat < file
если вы не хотите, чтобы команда потерпела неудачу, еслиfile
она не существует, аfile
вместо этого создана пустая .Не усеченный аспект
<>
делает полезным перезаписывать файлы на месте. Однако в этом случае вы обычно не используете его в дескрипторе файла 0:заменяет первые 3 байта
file
сxxx
.В некоторых системах, таких как Linux,
<>
в именованном канале (FIFO) открывает именованный канал без блокировки (не дожидаясь, пока какой-либо другой процесс откроет другой конец), и обеспечивает сохранение структуры канала. Например, в:sed
обрабатывает входящие данные из любого числа других процессов, записывающих в него, и никогда не видитeof
.источник
<>
умолчанию используется1<>
(stdout) вместо0<>
(stdin). Это ошибка соответствия POSIX, о которой я сообщил, и она будет исправлена в следующем выпуске. github.com/att/ast/issues/75 Но до тех пор, пока текущие версии ksh93 не выйдут из употребления, вы должны включить номер дескриптора файла, чтобы использовать его<>
переносимо.mkfifo fifo; exec 3<>fifo
блокировать?