Как использовать sudo с конвейерами?

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

Предположим, я хочу добавить строку в / 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 (append), файл будет перезаписан.

Ваша версия:

sudo echo "something" >> /etc/profile

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

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

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

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