Существует ошибка в usbmuxd пакете, детали видят https://bugzilla.redhat.com/show_bug.cgi? id=815491
Это только работает потому что tr
не изменяет размер файла.
1<>file
открывается file
как стандартный вывод в режиме перезаписи. (<>
назван режимом чтения-записи, но начиная с небольшого количества чтения программ stdout
, более полезно сфокусироваться на том, что это на самом деле делает.)
Обычно, когда Вы перенаправляете вывод (>file
), файл открыт в режиме "записи", который заставляет его или быть созданным или освобожденным. Другая общая опция >>file
, "добавьте" режим, который пропускает шаг, где файл освобожден, но помещает весь вывод в конец. 1<>file
также пропуски, освобождающие файл, но это помещает курсор записи в начале файла. (Вам нужно 1
потому что <>
значения по умолчанию к перенаправлению stdin
, нет stdout
).
Это только достаточно редко полезно, так как очень немного утилит так точны в своей модификации. Другой случай был бы поиском и заменой, где замена является точно той же длиной как оригинал. (Более короткая замена не работала бы также, потому что файл не является усеченным в конце; если бы вывод короче, чем оригинал, Вы закончили бы с любым используемым, чтобы быть в конце файла, все еще являющегося в конце файла.)
Когда Вы используете синтаксис < file
это открывает файл как только для чтения, и читает содержание строк в файле в стандарт в (STDIN иначе. дескриптор файла 0). Впоследствии стандарт (STDOUT иначе. дескриптор файла 1) открыт, как считано +, запись (1 <>) и содержание строк выписана таким образом.
Можно читать больше о вводе-выводе +, избивают этот раздел, Главу 20. Перенаправление ввода-вывода, Усовершенствованного Руководства по созданию сценариев Bash.
выборка
[j]<>filename
# Open file "filename" for reading and writing,
#+ and assign file descriptor "j" to it.
# If "filename" does not exist, create it.
# If file descriptor "j" is not specified, default to fd 0, stdin.
#
# An application of this is writing at a specified place in a file.
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
# Random access, by golly.
Смотрите на то, как дескрипторы файлов работают в этом названные Вопросы и ответы U&L: Как может тот же fd в различных процессах указывать на тот же файл?. Это покрывает, как тот же файл может быть открыт многократно.