Как использовать sudo с конвейерами? [дубликат]

Возможный дубликат:
sudo & redirect output

Допустим, я хочу добавить какую-то строку в /etc/profile. Я пробую:

$ sudo echo "something" >> /etc/profile
bash: /etc/profile: Access forbidden

Конечно, я мог бы написать:

$ sudo su
# echo "something" >> /etc/profile

, и это работает, однако это не работает в сценариях оболочки.

Итак, каков правильный путь?

13
задан 13 April 2017 в 15:23

2 ответа

Вы можете использовать tee:

$ echo "something" | sudo tee -a /etc/profile

Если вы опустите -a (добавить), файл будет перезаписан.

0
ответ дан 13 April 2017 в 15:23

Ваша версия:

sudo echo "something" >> /etc/profile

В этой команде echo запускается от имени пользователя root, но оболочка, перенаправляющая вывод echo к корневому файлу по-прежнему работает, как вы. Вот почему вы получаете «Доступ запрещен»

Рабочая версия:

sudo bash -c 'echo "something" >> /etc/profile'

В этой команде вы используете sudo для запуска новой оболочки с привилегиями root, а затем передайте этой оболочке всю командную строку (включая перенаправление) с параметром -c bash.

0
ответ дан 13 April 2017 в 15:23

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

Похожие вопросы: