Я новичок в написании скриптов на bash. Я пытаюсь сделать скрипт для экспорта переменных http_proxy. Вот что я делаю из терминала:
$export http_proxy=http://proxy21.iitd.ernet.in:3128/
$export https_proxy=https://proxy21.iitd.ernet.in:3128/
Это работает просто отлично. Теперь, вот мой скрипт (называется setproxy):
#!/usr/bin/env bash
if [ $1 -eq 22 ]
then
export http_proxy=http://proxy22.iitd.ernet.in:3128/
export https_proxy=https://proxy22.iitd.ernet.in:3128/
elif [ $1 -eq 21 ]
then
export http_proxy=http://proxy21.iitd.ernet.in:3128/
export https_proxy=https://proxy21.iitd.ernet.in:3128/
elif [ $1 -eq 61 ]
then
export http_proxy=http://proxy61.iitd.ernet.in:3128/
export https_proxy=https://proxy61.iitd.ernet.in:3128/
elif [ $1 -eq 62 ]
then
export http_proxy=http://proxy62.iitd.ernet.in:3128/
export https_proxy=https://proxy62.iitd.ernet.in:3128/
fi
По сути, я хочу установить соответствующий прокси-сервер в зависимости от ввода. Я поместил его в папку bin, сделал его исполняемым, добавил bin в путь, вошел и вышел. Терминал принимает setproxy как допустимую команду (по крайней мере, нет ошибки command not found). Но когда я делаю:
$setproxy 22
Эффекта нет. Прокси остается неизменным. Что я делаю не так?
решение1
При вызове скрипта вызывается новая дочерняя оболочка для его запуска. Ее прокси установлены, но прокси родительского процесса (ваша оболочка) не может быть изменен из дочернего процесса. Попробуйтепоискскрипт, т.е. назовите его как
. setproxy 21
Затем скрипт будет интерпретирован вашей текущей оболочкой.