Установка прокси-сервера в apt.conf с использованием сценария Bash

Я написал следующий сценарий 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 в 23:50

6 ответов

Ответ 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
ответ дан 22 May 2018 в 20:55
  • 1
    Спасибо, Дэвид! Я новичок в написании сценариев bash и по-прежнему изучаю его :) Нужна была другая помощь, если бы вы могли: я хочу установить сетевой прокси для gnome и kde, точно так же, как в ручном режиме: System Settings- & gt; Proxy- & gt; Set Ручной прокси и введите соответствующий порт и прокси. Можно ли это сделать с помощью сценариев bash? – Hritik Gupta 3 July 2017 в 07:58
  • 2
    @HritikGupta: Не могли бы вы открыть новый вопрос , если у вас есть новый или последующий вопрос? Раздел комментариев не подходит или предназначен для новых вопросов или расширенного обсуждения. Вы можете отправить мне комментарий с уведомлением, чтобы привлечь мое внимание к нему. Благодарю. – David Foerster 3 July 2017 в 14:15
  • 3
    Конечно! Пожалуйста, помогите мне здесь: askubuntu.com/questions/931662/setting-proxy-using-bash-script Спасибо! – Hritik Gupta 3 July 2017 в 22:17

Ответ 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
ответ дан 18 July 2018 в 10:48

Ответ 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
ответ дан 24 July 2018 в 19:39

Вы должны указать значение конфигурации:

"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 ], как упоминал Давид;)

1
ответ дан 22 May 2018 в 20:55
  • 1
    Спасибо, Равексина! Я новичок в написании сценариев bash и по-прежнему изучаю его :) Нужна была другая помощь, если бы вы могли: я хочу установить сетевой прокси для gnome и kde, точно так же, как в ручном режиме: System Settings- & gt; Proxy- & gt; Set Ручной прокси и введите соответствующий порт и прокси. Можно ли это сделать с помощью сценариев bash? – Hritik Gupta 3 July 2017 в 08:04
  • 2
    askubuntu.com/questions/350460/#350483 – Ravexina 3 July 2017 в 09:29
  • 3
    Разве он не должен ничего делать с конфигурационными файлами, такими как gsettings или kde.config? Также я сомневаюсь, что экспорт устанавливает сетевой прокси, поскольку мне все равно придется вручную вводить прокси в этом диалоговом окне после выполнения этой команды. – Hritik Gupta 3 July 2017 в 10:21
  • 4
    Я не являюсь пользователем GUI, который не знает об этом, однако ссылка, которую я предоставил, позволит прокси-серверу в вашем окне терминала. – Ravexina 3 July 2017 в 10:26
  • 5
    Эта же команда не работает для оболочки рыбы . Я должен набрать: set -Ux http_proxy " http: // " $ prox ": " $ port " & quot ;. Но, когда я выполняю это по моему сценарию, он показывает ошибку: prox.sh: 61: set: Illegal option -U – Hritik Gupta 3 July 2017 в 11:55

Вы должны указать значение конфигурации:

"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 ], как упоминал Давид;)

1
ответ дан 18 July 2018 в 10:48

Вы должны указать значение конфигурации:

"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 ], как упоминал Давид;)

1
ответ дан 24 July 2018 в 19:39
  • 1
    Спасибо, Равексина! Я новичок в написании сценариев bash и по-прежнему изучаю его :) Нужна была другая помощь, если бы вы могли: я хочу установить сетевой прокси для gnome и kde, точно так же, как в ручном режиме: System Settings- & gt; Proxy- & gt; Set Ручной прокси и введите соответствующий порт и прокси. Можно ли это сделать с помощью сценариев bash? – Hritik Gupta 3 July 2017 в 08:04
  • 2
    [D0] askubuntu.com/questions/350460/#350483 – Ravexina 3 July 2017 в 09:29
  • 3
    Разве он не должен ничего делать с конфигурационными файлами, такими как gsettings или kde.config? Также я сомневаюсь, что экспорт устанавливает сетевой прокси, поскольку мне все равно придется вручную вводить прокси в этом диалоговом окне после выполнения этой команды. – Hritik Gupta 3 July 2017 в 10:21
  • 4
    Я не являюсь пользователем GUI, который не знает об этом, однако ссылка, которую я предоставил, позволит прокси-серверу в вашем окне терминала. – Ravexina 3 July 2017 в 10:26
  • 5
    Эта же команда не работает для оболочки рыбы . Я должен набрать: set -Ux http_proxy & quot; http: // & quot; $ prox & quot;: & quot; $ port & quot; & quot ;. Но, когда я выполняю это по моему сценарию, он показывает ошибку: prox.sh: 61: set: Illegal option -U – Hritik Gupta 3 July 2017 в 11:55

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

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