我编写了以下 bash 脚本来在 apt.conf 文件中写入代理,并隐藏它以免回显到终端。
sudo echo "Acquire::http::proxy "http://"$prox":"$port"/";" | sudo tee -a /etc/apt/apt.conf > /dev/null 2>&1
sudo echo "Acquire::https::proxy "https://"$prox":"$port"/";" | sudo tee -a /etc/apt/apt.conf > /dev/null 2>&1
sudo echo "Acquire::ftp::proxy "ftp://"$prox":"$port"/";" | sudo tee -a /etc/apt/apt.conf > /dev/null 2>&1
尽管命令写入了 apt.conf 文件,但是在运行脚本时,我收到以下错误:
E: Syntax error /etc/apt/apt.conf:6: Extra junk at end of file
非常感谢您的帮助!
答案1
Ravexina 的回答正确地指出了根本原因:
您需要引用配置值。
但是,如果您发现转义的引号难以阅读或者很丑陋,还有另一种选择:
printf 'Acquire::http::proxy "http://%s:%u";\n' "$prox" "$port" | sudo tee -a /etc/apt/apt.conf > /dev/null
我认为您可以自己完成另外两行。
改进建议:
您的代码中有很多重复,您可以通过循环避免这些重复:
for proto in http https ftp; do
printf 'Acquire::%s::proxy "%s://%s:%u";\n' "$proto" "$proto" "$prox" "$port"
done |
sudo tee -a /etc/apt/apt.conf > /dev/null
答案2
您需要引用配置值:
"Acquire::http::proxy \""http://"$prox":"$port""\";"
如果你尝试将其呼应出来:
echo "Acquire::http::proxy \""http://"$prox":"$port""\";"
输出应该是这样的:
Acquire::http::proxy "http://x.x.x.x:yy";
并不是:
Acquire::http::proxy http://x.x.x.x:yy/;
因为http://x.x.x.x:yy/
在 的眼里就是垃圾apt
。
sudo
正如 David 所提到的,您之前也不需要echo
;)