2016-08-01 59 views
4

我有以下問題:在腳本中,不能以root身份執行,我必須寫一行到新創建的空文件。這個文件在/ etc中,所以我需要提升privillges寫入它。如何將行添加到使用sed的空文件,但不回顯?

創建文件很簡單:

sudo touch /etc/myfile 

現在,只需使用echo寫像這樣不工作的文件...

sudo echo "something" > /etc/myfile 

...因爲只有第一命令的一部分(回顯)是用sudo執行的,但不是重定向到文件中。

以前我用這樣的事情...

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

...添加到文件,工作結束,因爲該文件是不是空的。但由於sed工程基於行,它沒有做任何事情,文件保持完全空白。

有什麼建議嗎?有沒有辦法用echo來做到這一點?任何特殊的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 *執行的命令中使用變量,則必須使用雙引號。 –

相關問題