O que o 'set $ variable' faz?

0

Eu sei que set é usado para manipular variáveis de ambiente, mas eu quero ter certeza - essas alterações não são permanentes, certo? Quer dizer, uma vez que eu fecho o shell e reabro-o, nenhuma mudança será preservada, não será? E eles não são herdados pelos processos filhos, para que export seja usado, estou correto?

Quero dizer expressões como

set IFS ':'
    
por infoholic_anonymous 04.02.2014 / 19:45

2 respostas

7

set manipula opções de shell ou parâmetros posicionais. Em um prompt bash, digite help set

O comando set IFS : definirá $1="IFS" e $2=":" . Não irá não alterar o valor da variável IFS.

Quaisquer alterações nas opções do shell e nos parâmetros posicionais não serão salvas entre as sessões do bash. Você precisa alterar seus arquivos de inicialização (.bashrc et al) para isso.

    
por 04.02.2014 / 19:57
1

set não é usado para manipular variáveis ambientais, ele é usado para definir opções de shell. Pense nisso como o equivalente a um menu de configurações. Assim, enquanto algumas dessas opções podem afetar o modo como bash lida com variáveis ambientais, isso não tem nada a ver com a configuração delas.

De qualquer forma, se você alterar o valor de uma variável como esta:

foo='bar'

Ele será alterado apenas para o seu shell atual e não afetará mais nada. Se você usa export, assim:

export foo='bar'

Ele será exportado para o shell atual e todos os shells iniciados a partir do shell atual, mas ainda assim não afetará nenhum shells iniciado fora da sessão atual do shell. Para ilustrar:

$ foo='bar'
$ echo "$foo"
bar
$ bash   ## start a new shell
$ echo "$foo"

$

O segundo echo imprime nada porque a variável não foi exportada para o novo shell. Se você tivesse usado export , teria sido: \

$ export foo='bar'
$ bash
$ echo "$foo"
bar

Em outras palavras, não apenas as mudanças de variáveis como essa não persistem após o reinício, elas nem afetarão os novos shells que você iniciar.

    
por 04.02.2014 / 21:04