Sou muito novo em scripts bash. Estou tentando fazer um script para exportar as variáveis http_proxy. Isto é o que eu faço no terminal:
$export http_proxy=http://proxy21.iitd.ernet.in:3128/
$export https_proxy=https://proxy21.iitd.ernet.in:3128/
Isso funciona muito bem. Agora, aqui está meu script (chamado 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
Essencialmente, quero definir o servidor proxy apropriado dependendo da entrada. Coloquei-o na pasta bin, tornei-o executável, adicionei bin ao caminho, efetuei login e logout. O terminal aceita setproxy como um comando válido (pelo menos não há erro de comando não encontrado). Mas, quando eu faço isso:
$setproxy 22
Não há efeito. O proxy permanece inalterado. O que estou fazendo de errado?
Responder1
Quando você chama o script, um novo shell filho é invocado para executá-lo. Seus proxies estão definidos, mas o proxy do processo pai (seu shell) não pode ser alterado de um processo filho. Tentarabastecimentoo script, ou seja, chame-o como
. setproxy 21
Então o script será interpretado pelo seu shell atual.