Я выполнил этот код:
sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
Но даже при том, что, я получаю "разрешение, отклоненное", вызываю Вас, должен быть корень для внесения изменений в/etc/init.d каталоге. И так или иначе, моя команда выше не работает.
Существует ли способ решить это?
Перенаправление в файл обрабатывается ударом. Это поэтому не наследовало разрешения, данные sudo.
Использовать sudo tee
для записи в файл как корень.
Попробуйте это:
cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF
echo "Hello World"
EOF
Заметьте это $,
в двойных кавычках мог бы быть интерпретирован.
Вы могли предоставить себе персистентные su-права с
# sudo -s
затем Ваша команда (больше не нуждаются к sudo) и выходит с
# exit
Править:
Я предполагаю, что Вы спрашиваете связанный с Ubuntu, потому что Ваш вопрос отмечен с этим. В другом распределении как SuSe у Вас будет способность использовать
# su
вместо # sudo -s
Эта часть: sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
центр быть просмотренным как это:
sudo somecommand --put the result of the sudo command into--> /etc/init.d/dropbox
Таким же образом как это:
ls somedirectory > filename
ls somedirectory --put the result of the ls command into--> filename
Это означает, что записи файла будут делаться как Ваш текущий пользователь, не как корень.
Можно решить его при помощи tee
поскольку Benoit показывает в своем ответе.