1

Я хочу сопоставить wget, чтобы --no-check-certificate использовался автоматически. Вот моя лучшая попытка:

function wget() { wget @1 --no-check-certificate }

Это не работает отлично. Для начала мне нужно принять произвольное количество аргументов. Я также не уверен, что это правильный способ "перезаписать" wget , он кажется слишком ссылочным. Как сделать так, чтобы wget автоматически использовал --no-check-certificate?

3 ответа3

0

Если вы хотите использовать Wget, то почему бы не использовать его файл конфигурации? Не связывайтесь с файлами конфигурации bash, это клунки.

Wget имеет конфигурационный файл для одного пользователя:

$ HOME/.wgetrc

Местоположение для всех пользователей может быть /usr /local /etc /wgetrc или /etc /wgetrc, в зависимости от вашей установки.

Чтобы отключить проверку сертификата ssl для каждого вызова wget (который, как вы знаете, небезопасен), вы можете использовать эту директиву в этом файле:

check_certificate = off

Руководство по GNU для Wget

0

Просто используйте alias .

Псевдонимы имеют преимущество перед встроенными модулями и приложениями, поэтому вы можете перезаписывать приложения.

Просто добавьте эту строку в ваш .bashrc , .bash_aliases или аналогичный:

alias wget='wget --no-check-certificate'

Псевдоним будет расширен до его выполнения. Все что после wget будет передано команде. Только тогда это будет выполнено как обычно. Это возможно, потому что расширение псевдонима выполняется оболочкой, вызов команды, поиск пути и т.д. Выполняется системой (может быть ядром).

Если вы хотите применить это поведение к любому экземпляру wget , даже если он вызывается другим приложением, используйте .wgetrc и добавьте следующую строку:

check-certificate = off
0

У вас есть правильная основная идея, но есть некоторые изменения, которые необходимо сделать:

  1. Сначала укажите параметры, включая --no-check-certificate , перед любыми URL-адресами.
  2. Чтобы избежать любой возможной рекурсии, замените wget в теле функции на $(which wget) при объявлении определения функции. Это работает, потому which это внешняя программа, которая поэтому не знает псевдонимов или определений функций в bash .
  3. Чтобы передать полную строку параметров функции, замените ваш $1 на "$@" . Это расширяется до полной строки параметров с двойными кавычками вокруг параметров, чтобы остановить разбиение параметров во встроенных пространствах. Это работает на основанных на Борне оболочках (sh , ksh , bash и т.д.).

Все это приводит к следующему определению функции (с использованием синтаксиса bash ):

wget() { $(which wget) --no-check-certificate "$@"; }

Используя это, вы можете вызывать wget с любым количеством опций и параметров, сколько захотите, и --no-check-certificate всегда будет включен в строку выполнения. Вы можете добавить это в файл запуска оболочки (например, ~/.bashrc).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .