2012-05-22 95 views
4

我想做的事的東西線:附加到受保護的文件

echo "Append string" >> protected_file 

然而,由於這一文件進行寫保護我得到一個錯誤。運行:

sudo echo "Append string" >> protected_file 

似乎在echo命令上運行sudo,仍然給我權限錯誤,我該如何附加到此文件?

+1

您應該'sudo'你的shell腳本,不'echo'命令。 – Raptor

回答

9
echo "Append string" | sudo tee -a protected_file >/dev/null 
+1

+1內 - 不像公認的答案,它不給任何不需要它們的額外特權,如果內容是由比回聲更復雜的東西生成的,這將是重要的。 –

+1

爲什麼需要>/dev/null? – Richard

+1

@Richard:因爲'tee'發送輸出到文件*和*到標準輸出(兩個地方 - 就像一個管道中的「tee」),我們不需要額外的輸出。將標準重定向到'/ dev/null'會丟棄它。 –

3

對於字面解釋,

sudo sh -c 'echo "Append string" >> protected_file' 

但我原則上同意ShivanRaptor。

說明:>>是一個shell運算符。如果您調用sudo command,則不會運行另一個shell;因此,如果不重定向echo,則不能重定向sudo(最終會在重定向時爲您提供錯誤的用戶標識)。訣竅是在sudo內部啓動一個單獨的shell,您可以在其中發出重定向操作符。

+0

謝謝,但這只是我在cmd行寫的一個命令,而不是在shell腳本 – Richard

0

或試試這個:

echo "echo 'append string' >> protected_file" | sudo bash 
0

全部放在一起並固定答案之一,有3種方式:

sudo su root -c "echo 'append string' > protected_file" 
echo "echo 'append string' >> protected_file" | sudo bash 
echo "append string" | sudo tee -a protected_file >/dev/null