2014-04-05 33 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?

相关问题