Ответ 1
Запустите bash
как sudo
:
$ sudo bash -c "cat add_file >> /etc/file"
$ whoami;sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
Это команда оболочки, в результате которой "Permission denied", когда я пытаюсь добавить данные в файл в другой файл с помощью sudo:
sudo cat add_file >> /etc/file
Файл в /etc/file
принадлежит root
(то есть me), а его разрешения rw-r--r--
. Должен ли я стать root
на какое-то время, чтобы заставить его работать или есть обходное решение для sudo
?
Запустите bash
как sudo
:
$ sudo bash -c "cat add_file >> /etc/file"
$ whoami;sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
Попробуйте сделать это вместо:
sudo tee -a /etc/file < add_file
Это легче, чем запуск bash или sh -c command
Смешной вариант - использовать ed
(стандартный редактор):
sudo ed -s /etc/file <<< $'r add_file\nwq'
Я знаю, что мне не понравится этот замечательный ответ, но я хотел включить его здесь в любом случае (потому что это смешно). Готово!
Вы пытаетесь записать результат команды sudo cat add_file
в файл /etc/file. И, видимо, у вас нет такого права.
man sudo
дает следующий пример:
To make a usage listing of the directories in the /home partition. Note that this runs the commands in a sub-shell to make the cd and file redirection work. $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
Итак, вы должны попробовать:
sudo sh -c "cat add_file >> /etc/file"
Аналогичный подход к @gniourf_gniourf отвечает, но используя ex
:
sudo ex +"r in.txt" -cwq out.txt
что эквивалентно vi
/vim
Ex-mode (-e
).
Этот пример редактирования на месте - это простой, безопасный и удобный подход, поскольку он не использует никаких оболочек оболочки, FIFO или оболочки внутри обходных решений оболочки.
Чтобы повысить производительность для сценариев, рассмотрите режим молчания (-s
).
попробуйте
sudo bash -c 'cat add_file >> /etc/file'
или
cat add_file | sudo tee -a /etc/file > /dev/null