Детали перенаправления в bash (в частности, Cygwin) - PullRequest
1 голос
/ 20 июля 2009

Мне интересно, может ли кто-нибудь указать мне ресурсы, относящиеся к механике низкого (ish) уровня того, как работает перерисовка вывода в bash. К сожалению, мне удалось открыть только страницы и страницы основных руководств "> отправляет вывод в файл", но, похоже, нет ничего более подробного, чем это.

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

Фактический вывод получен из Java-программы, которая выводит простые сообщения о ходе выполнения через System.out.println (), на случай, если здесь может быть ошибка, которую я не знаю

1 Ответ

3 голосов
/ 20 июля 2009

Я не знаю, как это работает в Cygwin, но обычно такие вещи используются:

  1. fork для создания нового процесса.
  2. открыть , чтобы открыть файл перенаправления.
  3. dup2 , чтобы сделать STDIN, STDOUT или STDERR идентичными открытому файлу.
  4. exec для запуска указанной команды с перенаправлением потоков.

Разница между ">" и ">>" обычно обрабатывается путем присвоения различных флагов команде open ; для ">" файл просто открывается, а для ">>" файл открывается в режиме добавления (O_APPEND).

Я сомневаюсь, что Cygwin внес какие-либо существенные изменения в исходный исходный код BASH, поэтому я подозреваю, что то, что вы испытываете, может быть связано с реализацией Cygwin этих функций UNIX на WIN32.

...