2014-04-05 32 views
1

我正在嘗試製作一個bash腳本,它將在運行ubuntu studio的計算機上設置一個代理。這[1]告訴我,我應該通過在/etc/apt/apt.conf.d/中創建一個文件95proxies來設置apt-get和Update Manager的代理。apt-get proxy:Permission denied

問題是當我運行這段代碼時。

sudo echo "Acquire::http::proxy "http://myproxy.server.com:8080/"; 
Acquire::ftp::proxy "ftp://myproxy.server.com:8080/"; 
Acquire::https::proxy "https://myproxy.server.com:8080/"; 
" > /etc/apt/apt.conf.d/95proxies 

我得到:

bash: /etc/apt/apt.conf.d/95proxies: Permission denied 

我能夠

sudo touch /etc/apt/apt.conf.d/95proxies 

創建與觸摸的文件,但是當我去把文件中的數據我仍然得到錯誤信息以上。

[1] https://askubuntu.com/questions/150210/how-do-i-set-systemwide-proxy-servers-in-xubuntu-lubuntu-or-ubuntu-studio

回答

0

嘗試以下命令,

sudo sh -c '(echo "Acquire::http::proxy \"http://myproxy.server.com:8080/\";"; echo "Acquire::ftp::proxy \"ftp://myproxy.server.com:8080/\";"; echo "Acquire::https::proxy \"https://myproxy.server.com:8080/\";") > /etc/apt/apt.conf.d/95proxies' 

因爲由超級用戶擁有的目錄/etc/apt/apt.conf.d的,則必須在一個單獨的子shell運行echo命令。

要通過echo命令多行添加到文件中,語法將

(echo first line; echo second line) >> output file 
0
sudo printf 'Acquire::http::proxy "http://myproxy.server.com:8080/;\nAcquire::ftp::proxy "ftp://myproxy.server.com:8080/;\nAcquire::https::proxy "https://myproxy.server.com:8080/;\n"' > /etc/apt/apt.conf.d/95proxies 

要打印,您必須用printf不回一個文件中的新行字符(\ n)的。

在你的情況bash將使用命令的每條線作爲一個新的命令(因爲;,所以> /etc/apt/apt.conf.d/95proxies將被作爲不須藤一個命令執行。

1

這是基本相同的問題,如「How do I use sudo to redirect output to a location I don't have permission to write to?描述」也就是說,即使你正在運行echosudo,這不是echo是寫入了文件,這是你的外殼,和你的shell沒有權限寫入該文件。

一個可能的解決辦法要使用sudo與程序,如tee,一個ctually並寫入文件本身,而不是依靠外殼:

echo "Acquire::http::proxy \"http://myproxy.server.com:8080/\";" | sudo tee /etc/apt/apt.conf.d/95proxies > /dev/null 

對於這個問題更可能的解決方案,請參閱How do I use sudo to redirect output to a location I don't have permission to write to?

相關問題