2012-10-08 78 views
1

我正在嘗試編寫一個腳本,將行添加到/ etc/hosts中,這意味着我需要sudoer權限。但是,如果我從桌面運行腳本,它不會提示輸入密碼。我只是被拒絕了權限。Sudo不提示輸入密碼Mac bash腳本

示例腳本:

#!/bin/bash 
sudo echo '131.253.13.32  www.google.com' >> /etc/hosts 
dscacheutil -flushcache 

終端彈出並表示拒絕的權限,但實際上從未提示輸入sudo的密碼。有沒有辦法來解決這個問題?

+0

是否對其他opparations須藤工作 – rien333

+0

它不會提示輸入密碼。如果我這樣做須藤LS它將運行ls命令,但它?不會像sudo那樣運行 – spassen

回答

3

sudo doesn't apply to the redirection operator。您可以使用echo | sudo tee -asudo bash -c 'echo >>'

echo 131.253.13.32 www.google.com | sudo tee -a /etc/hosts 
sudo bash -c 'echo 131.253.13.32 www.google.com >> /etc/hosts' 
+0

找不到bash -c命令,但是第一個像魅力一樣工作,謝謝。 – spassen

1

什麼,你在這裏做的實際上是:

  1. 切換到root用戶,並運行echo

  2. 切換回自己,並嘗試添加sudo的輸出到 /etc/hosts

這不起作用,因爲當您追加到/etc/hosts而不是當您運行echo時,您需要成爲root用戶。

做到這一點,最簡單的方法是

sudo bash -c "sudo echo '131.253.13.32  www.google.com' >> /etc/hosts" 

將運行bash的自己爲根。然而,這並不是特別安全,因爲你現在正在以root身份調用一個shell,這可能會做很多令人討厭的事情(特別是,它會執行名稱在環境變量BASH_ENV中的文件的內容,如果有的話。一個那麼你可能更喜歡多一點謹慎做到這一點:

sudo env -i bash -c "sudo echo '131.253.13.32  www.google.com' >> /etc/hosts" 
相關問題