Возможный дубликат:
sudo & redirect output
Допустим, я хочу добавить какую-то строку в /etc/profile. Я пробую:
$ sudo echo "something" >> /etc/profile
bash: /etc/profile: Access forbidden
Конечно, я мог бы написать:
$ sudo su
# echo "something" >> /etc/profile
, и это работает, однако это не работает в сценариях оболочки.
Итак, каков правильный путь?
Вы можете использовать tee
:
$ echo "something" | sudo tee -a /etc/profile
Если вы опустите -a
(добавить), файл будет перезаписан.
Ваша версия:
sudo echo "something" >> /etc/profile
В этой команде echo
запускается от имени пользователя root, но оболочка, перенаправляющая вывод echo
к корневому файлу по-прежнему работает, как вы. Вот почему вы получаете «Доступ запрещен»
Рабочая версия:
sudo bash -c 'echo "something" >> /etc/profile'
В этой команде вы используете sudo для запуска новой оболочки с привилегиями root, а затем передайте этой оболочке всю командную строку (включая перенаправление) с параметром -c bash.