2016-08-01 2 views
4

У меня есть следующая проблема: в скрипте, который не должен выполняться как root, я должен написать строку для вновь созданного, пустого файла. Этот файл находится в/etc, поэтому мне нужно получить повышенные права на запись.Как добавить строку в пустой файл с помощью sed, но не echo?

Создание файла прост:

sudo touch /etc/myfile 

Теперь, используя только эхо для записи в файл, например так не работает ...

sudo echo "something" > /etc/myfile 

... потому что только первый часть команды (echo) выполняется с помощью sudo, но не перенаправление в файл.

Раньше я использовал что-то вроде этого ...

sudo sed -i -e "\$aInsert this" /etc/differntfile 

... добавить в конец файла, который работал, потому что файл не был пуст. Но поскольку sed работает на основе линии, он ничего не делает, файл остается полностью пустым.

Любые предложения? Есть ли способ сделать это с эхом так или иначе? Любое специальное выражение sed? Любые другие инструменты, которые я мог бы использовать?

ответ

5

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

echo "something" | sudo tee /etc/myfile # tee -a to append 

Или перенаправлять /dev/null если вы не хотите видеть вывод:

echo "something" | sudo tee /etc/myfile > /dev/null 

Другой вариант заключается в использовании sh -c выполнить полную команду под sudo:

sudo sh -c 'echo "something" > /etc/myfile' 

Относительно этого sed: Я не думаю, что это возможно. Поскольку sed является редактором потока, если нет потока, он ничего не может с этим поделать.

+1

Эта проблема устраняет проблему. Короткий и прямой ++ – sjsam

+1

Отлично, это намного проще, чем я ожидал. –

+2

Если вы используете переменные в команде, выполняемой с помощью * sudo sh -c *, вам нужно использовать двойные кавычки. –