Ошибка возникает из-за порядка, в котором оболочка выполняет действия.
Перенаправление выполняется еще до того, как оболочка выполнит sudo
, и поэтому выполняется с разрешениями пользователя, с которым вы в настоящее время работаете. Поскольку у вас нет прав на запись для создания / усечения цели перенаправления, вы получите ошибку отказано в разрешении
из оболочки.
Решение состоит в том, чтобы гарантировать, что выходной файл создается под идентификатором, предоставленным вам sudo
, например с tee
:
$ generate_output | sudo tee target_file
Перенаправление ввода-вывода отсутствовало в первоначальной реализации PDP -7 (примерно в 1969 году ), но вскоре после этого было добавлено. При этом вы можете реализовать моральный эквивалент трубы :
.prog1 | prog2
можно реализовать с помощью
prog1 > tempfile
prog2 < tempfile
rm tempfile
На самом деле трубы часто объясняются с помощью этой модели.
Бумага Эволюция системы разделения времени Unix -Ритчи настоятельно рекомендуется для ранней истории Unix. В нем говорится: «Каналы появились в Unix в 1972 году».