UNIX перенаправление в файл без разрешения записи системной обработки
Я изучаю среду UNIX и у меня возник вопрос: когда происходит перенаправление ошибки std в файл, что произойдет, если у файла, на который мы перенаправляем, есть права на запись, в которых пользователю отказано?
Пример:
./command >file 2>&1
./command 2>&1 >file
Что происходит в первую очередь с сообщением об ошибке? Это автоматически сбрасывается? Я получаю одну и ту же ошибку в обеих строках, в этом разрешении отказано, но поскольку система читает слева направо, в чем разница между способом обработки?
Любые ссылки на учебные пособия, которые входят в механизм, стоящий за этим, были бы полезны, так что пока я могу найти информацию о том, как он обрабатывает это, если у нас есть разрешения на запись.
1 ответ
Краткий ответ: команда не будет выполняться вообще.
Объяснение: перенаправление основано на файловых дескрипторах, которые необходимо создать с помощью вызова open() перед выполнением процесса.
Мой Bash просто отверг это:
$ sleep 1 2>&1 > /nonwritable
-bash: /nonwritable: Permission denied
Итак, вы видите, есть защита для большинства оболочек.