UNIX перенаправление в файл без разрешения записи системной обработки

Я изучаю среду UNIX и у меня возник вопрос: когда происходит перенаправление ошибки std в файл, что произойдет, если у файла, на который мы перенаправляем, есть права на запись, в которых пользователю отказано?

Пример:

./command >file 2>&1
./command 2>&1 >file

Что происходит в первую очередь с сообщением об ошибке? Это автоматически сбрасывается? Я получаю одну и ту же ошибку в обеих строках, в этом разрешении отказано, но поскольку система читает слева направо, в чем разница между способом обработки?

Любые ссылки на учебные пособия, которые входят в механизм, стоящий за этим, были бы полезны, так что пока я могу найти информацию о том, как он обрабатывает это, если у нас есть разрешения на запись.

1 ответ

Краткий ответ: команда не будет выполняться вообще.

Объяснение: перенаправление основано на файловых дескрипторах, которые необходимо создать с помощью вызова open() перед выполнением процесса.

Мой Bash просто отверг это:

$ sleep 1 2>&1 > /nonwritable
-bash: /nonwritable: Permission denied

Итак, вы видите, есть защита для большинства оболочек.

Другие вопросы по тегам