Я написал следующий скрипт 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
Помощь приветствуется!
Ответ 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
Необходимо заключить значение конфигурации в кавычки:
"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 упомянул ;)