Когда выполняется IO-Redirection Operator?

Я могу подтвердить, что обновление до (переустановка) Vagrant v.1.7.4 исправило ошибки. https: // docs. vagrantup.com/v2/installation/index.html

Был запрос на вытягивание, который исправил его для более поздних версий, чем 1.7.2. https://github.com/mitchellh/vagrant / issues / 5572

0
23.01.2020, 12:07
2 ответа

Да, вы правы.

Оболочка выполняет перенаправление перед выполнением команды. Когда оболочка запускает команду, она соответствующим образом настраивает стандартный ввод, вывод и ошибку новой команды. По умолчанию они подключены к терминалу (или тому, к чему подключена оболочка ). Когда присутствуют перенаправления, соответствующие файловые дескрипторы подключаются к соответствующим файлам (или каналам и т. д. ). Нет буферизации и т.д. — поэтому оболочка не накапливает вывод программы и потом не записывает его в файл; он соединяет вывод программы с файлом, и это касается всего.

Это означает, что файлы необходимо открыть перед выполнением команды.

Вы можете узнать больше об этом в главе POSIX о языке оболочки . В первом разделе перечисляется последовательность операций, которые оболочка выполняет перед выполнением команды; вы увидите, что перенаправление происходит до выполнения команды.

4
28.01.2020, 02:16

Поскольку lsзапускается с открытым файлом как стандартный вывод, очевидно, что файл необходимо создать до выполнения программы ls.

если вы хотите получить больше информации, вы можете ознакомиться со стандартом POSIX для оболочки:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html

и описание командного языка оболочки:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18

1
28.01.2020, 02:16

Теги

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