Назад | Перейти на главную страницу

Почему wget не читает HTTP_PROXY в верхнем регистре?

Я знаю, что в unix / linux переменные окружения в верхнем регистре, например LD_LIBRARY_PATH ; HOME ; $USER и так далее. Сегодня, играя с wget, я увидел, что эти команды просто используют переменные окружения в нижнем регистре:

env | grep -i proxy
http_proxy=http://10.0.0.120:8080
wget -q http://google.it
echo $?
0
unset http_proxy
export HTTP_PROXY=http://10.0.0.120:8080
wget -q http://google.it
echo $?
1

Почему wget не читает HTTP_PROXY в верхнем регистре?

Краткий ответ: К сожалению, разные программы используют разные env переменные.

Длинный ответ, от (https://wiki.archlinux.org/index.php/proxy_settings#Environment_variables):

Некоторые программы (например, wget) используют переменные окружения в форме «protocol_proxy» для определения прокси для данного протокола. (...) Некоторые программы ищут версию переменных среды, написанную заглавными буквами.

Раньше я делал простой скрипт, который устанавливает обе версии (все заглавные и «обычные» версии, чтобы легко включать и выключать их, и кажется, что это обычный способ делать что-то, если это нужно делать через env переменные.

Это всего лишь предположение, но сроки проекта предполагают, что это для обратной совместимости с Lynx, который предшествует curl на несколько лет (и который использует прокси-переменные в нижнем регистре).

Unix чувствителен к регистру. Это означает, что $ http_proxy и $ HTTP_PROXY - две разные переменные.

Посмотри на это:

user@foo[~]+ xx=2
user@foo[~]+ echo $xx
2
user@foo[~]+ echo $XX

user@foo[~]+