Настройка прокси в apt.conf с помощью Bash Script

Я написал следующий скрипт 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

Помощь приветствуется!

0
задан 2 July 2017 в 13:50

2 ответа

Ответ 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
ответ дан 3 November 2019 в 00:20

Необходимо заключить значение конфигурации в кавычки:

"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 прежде echo поскольку David упомянул ;)

1
ответ дан 3 November 2019 в 00:20

Другие вопросы по тегам:

Похожие вопросы: