Bash Script - Definindo Variáveis de Ambiente Local (Proxy)

1

Estou tentando criar scripts 2 . Um para definir as variáveis do ambiente local e o outro para desativar o ambiente local varibales.

Primeiramente, ambos os scripts foram criados com os seguintes comandos:

touch set-proxy.sh touch unset-proxy.sh

Depois tornei os dois executáveis:

chmod 700 set-proxy.sh chmod 700 unset-proxy.sh

Então eu entrei no arquivo set-proxy.sh e coloquei o seguinte dentro:

#!/bin/bash

'export HTTP_PROXY=http://nick:nick@proxy.***.***.com:****'
'export HTTPS_PROXY=http://nick:nick@proxy.***.***.com:****'
'export HTTP-PROXY=http://nick:nick@proxy.***.***.com:****'
'export HTTPS-PROXY=http://nick:nick@proxy.***.***.com:****'
'export http_proxy=http://nick:nick@proxy.***.***.com:****'
'export https_proxy=http://nick:nick@proxy.***.***.com:****'
'export http-proxy=http://nick:nick@proxy.***.***.com:****'
'export https-proxy=http://nick:nick@proxy.***.***.com:****'

Depois entrei no arquivo unset-proxy.sh e coloquei o seguinte dentro:

#!/bin/bash

'unset HTTP_PROXY'
'unset HTTPS_PROXY'
'unset HTTP-PROXY'
'unset HTTPS-PROXY'
'unset http_proxy'
'unset https_proxy'
'unset http-proxy'
'unset https-proxy'

Eu praticamente preciso de uma maneira rápida de desarmar e definir todas as configurações de proxy. Eu pensei em criar dois scripts seria a maneira mais simples.

No entanto, quando executo ./unset-proxy.sh ou ./set-proxy.sh , recebo as seguintes mensagens de erro:

./unset-proxy: line 5: unset: 'HTTP-PROXY': not a valid identifier
./unset-proxy: line 6: unset: 'HTTPS-PROXY': not a valid identifier
./unset-proxy: line 9: unset: 'http-proxy': not a valid identifier
./unset-proxy: line 10: unset: 'https-proxy': not a valid identifier

(Então eu obtenho o mesmo com o set-proxy.sh também).

Se alguém puder me ajudar a apontar na direção certa do que estou fazendo de errado e como posso corrigi-lo, seria muito apreciado. Obrigado.

    
por user257636 27.10.2017 / 03:21

1 resposta

6

Parece que há vários erros aqui. Primeiro, suas expressões de atribuição de variáveis não devem estar dentro de backticks. Os backticks são uma sintaxe (um tanto datada) para a substituição de comandos . Acho que o que você estava procurando era aspas simples . As variáveis de cotação são feitas para preservar literais de string e evitar substituição de parâmetros .

Além disso, você não pode usar o caractere de hífen em seus nomes de variáveis. Aqui está um trecho do Manual do bash, capítulo 2: definições :

name

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

Veja também as seguintes postagens para mais informações:

Veja a aparência dos seus scripts depois de remover os backticks e os hifens:

#!/bin/bash
# set_proxy.sh

export HTTP_PROXY='http://nick:nick@proxy.***.***.com:****'
export HTTPS_PROXY='http://nick:nick@proxy.***.***.com:****'
export http_proxy='http://nick:nick@proxy.***.***.com:****'
export https_proxy='http://nick:nick@proxy.***.***.com:****'

e:

#!/bin/bash
# unset_proxy.sh

unset HTTP_PROXY
unset HTTPS_PROXY
unset http_proxy
unset https_proxy

Uma observação final: a execução de um script faz com que ele seja executado em um subshell, portanto, as variáveis de ambiente não afetarão sua sessão de shell ativa. Veja, por exemplo, o seguinte post:

A resposta curta é que você não pode. Portanto, se você quiser que seus scripts modifiquem seu ambiente atual de shell, será necessário "procurá-los", por exemplo:

source set_proxy.sh

source unset_proxy.sh
    
por 27.10.2017 / 04:06