使用 Bash 脚本在 apt.conf 中设置代理

使用 Bash 脚本在 apt.conf 中设置代理

我编写了以下 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;)

相关内容