Перезапись входного файла

Существует ошибка в usbmuxd пакете, детали видят https://bugzilla.redhat.com/show_bug.cgi? id=815491

5
13.04.2017, 15:36
2 ответа

Это только работает потому что tr не изменяет размер файла.

1<>file открывается file как стандартный вывод в режиме перезаписи. (<> назван режимом чтения-записи, но начиная с небольшого количества чтения программ stdout, более полезно сфокусироваться на том, что это на самом деле делает.)

Обычно, когда Вы перенаправляете вывод (>file), файл открыт в режиме "записи", который заставляет его или быть созданным или освобожденным. Другая общая опция >>file, "добавьте" режим, который пропускает шаг, где файл освобожден, но помещает весь вывод в конец. 1<>file также пропуски, освобождающие файл, но это помещает курсор записи в начале файла. (Вам нужно 1 потому что <> значения по умолчанию к перенаправлению stdin, нет stdout).

Это только достаточно редко полезно, так как очень немного утилит так точны в своей модификации. Другой случай был бы поиском и заменой, где замена является точно той же длиной как оригинал. (Более короткая замена не работала бы также, потому что файл не является усеченным в конце; если бы вывод короче, чем оригинал, Вы закончили бы с любым используемым, чтобы быть в конце файла, все еще являющегося в конце файла.)

8
27.01.2020, 20:34

Когда Вы используете синтаксис < 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 в различных процессах указывать на тот же файл?. Это покрывает, как тот же файл может быть открыт многократно.

3
27.01.2020, 20:34
  • 1
    спасибо и +1. Я принял ответ rici, потому что он очистил паутину в моем понимании –  iruvar 20.08.2013, 20:00
  • 2
    @1_CR - благодарит сообщить мне. NP, Вы принимаете тот, который помогает Вам больше всего или имеет большую часть смысла. Я добавил мой, чтобы помочь Вам, но также и попытаться изложить в деталях тему лучше и также обеспечить связи между Вашим Q и фактической документацией, которая касается его. подстановочные знаки –  slm♦ 20.08.2013, 20:26

Теги

Похожие вопросы