$ @ e 'set env $ PATH' - Por que essa declaração deve entrar em .inputrc?

1

Eu tenho uma linha no meu .zshrc que diz:

set env $PATH

Aparentemente, isso afeta o valor de $@ . Eu li que $@ deveria estar vazio e que eu deveria não tem todas as declarações set no meu .zshrc (pelo menos no Bash algumas dessas declarações devem realmente entrar no meu arquivo .inputrc ).

Este é um conselho válido? Em caso afirmativo, por quê? O que set env $PATH faz e por que $@ deve estar vazio?

    
por Amelio Vazquez-Reina 31.01.2014 / 00:00

1 resposta

6

Você leu esse comentário incorretamente.

Em shells ao estilo Bourne, como bash e zsh, o comando set é uma construção que faz duas coisas:

  • define opções de shell, por exemplo set -x ativa a opção xtrace (rastreamentos de depuração de impressão);
  • quando chamado com argumentos não opcionais, define os parâmetros posicionais ( $1 , $2 ,…, acessados coletivamente como "$@" ).
  • Como uma exceção, se a opção -A ou +A for aprovada, set será atribuído à matriz especificada em vez de aos parâmetros posicionais.

O comando set env $PATH define os parâmetros posicionais para uma lista de dois: env e o valor da variável PATH . Isso não é útil.

As chamadas para set com argumentos não opcionais são úteis somente dentro de funções e scripts, não em .zshrc . Embora você possa ter chamadas para set com opções, as opções mais úteis são definidas em setopt .

.inputrc é um arquivo de configuração para o bash e alguns outros programas que usam a biblioteca readline . Ele contém principalmente atalhos de teclado e algumas configurações de opção do formulário set SETTING VALUE (mas não há nenhuma configuração chamada env ). Essas opções estão relacionadas à edição da linha de comando. Zsh não usa readline, então .inputrc não é relevante para zsh.

Eu não sei o que você estava tentando fazer com a linha set env $PATH . Se você quiser exportar o PATH para o ambiente, a sintaxe será export PATH ; no entanto:

  • PATH já foi exportado, não é necessário chamar export novamente, mesmo que você modifique o valor (a exportação de uma variável de ambiente modificada era necessária apenas no shell Bourne antigo).
  • Você não deve modificar as variáveis de ambiente em .zshrc , pois esse arquivo é lido por todos os shells interativos. Uma variável definida em .zshrc substituiria qualquer coisa definida pelo programa de chamada e afetaria apenas os programas iniciados por meio desse shell. O local certo para definir suas variáveis de ambiente é em ~/.profile , ~/.zprofile , ~/.pam_environment ou outros arquivos lidos no início de sua sessão. Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells? e as postagens vinculadas.

Se você quiser alterar o caminho, é necessário atribuir a ele:

PATH=/completely/new:/value/of/PATH
PATH=/directory/to/add/at/the/beginning:$PATH
PATH=$PATH:/directory/to/add/at/the/end

Zsh (como (t)csh de onde foi copiado) fornece uma variável chamada path (todas em minúsculas), que é uma matriz contendo a mesma lista de diretórios que PATH . Qualquer atualização para PATH afeta automaticamente path e vice-versa. Então, ao invés de manipular PATH , você pode fazer coisas como

path=(/completely/new /value/of/PATH)
path=(/directory/to/add/at/the/beginning $path)
path+=/directory/to/add/at/the/end
path+=(/one/more /and/another)
    
por 31.01.2014 / 02:54