$PATH vs. $caminho

Sep 06 2020

Não me lembro por quê, mas há muito tempo descobri que, por algum motivo, precisava definir essas duas variáveis. Não causou problemas no bash, mas agora no zsh, quando coloquei

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH

(a mesma coisa que usei em .bashrc) na minha inicialização, recebo

/Users/…/.zshenv:export:7: path: inconsistent type for assignment

O que eles querem dizer com "tipo" e para que $ path é usado?

Respostas

8 grg Sep 06 2020 at 04:09

O erro ao mencionar 'tipo' refere-se ao tipo de dados da variável, como string ou array.

$PATHé uma string, $pathé uma matriz. Você não pode atribuir uma string, seja por variável ou literal, a uma variável digitada para conter uma matriz, uma vez que os tipos não correspondem.

Quanto à diferença entre as duas variáveis: destinam-se a representar a mesma lista de pastas, mas em formatos diferentes. $PATHcontendo /path/to/one:/path/to/twosignificaria que $patho primeiro elemento é /path/to/onee o segundo é /path/to/two.

Você não deve precisar gerenciar as duas variáveis ​​(e atribuir uma à outra não funcionará, pois os tipos não correspondem) - o shell deve lidar com isso para você. Simplesmente anexe à $PATHstring e o caminho adicionado deverá existir como um elemento do $path.

Isso se aplica apenas a zsh, herdado de *csh. Você pode ver a 'ligação' entre as duas variáveis ​​com typeset -p PATH.

$path ser um array é muito conveniente:

  • anexar e alterar o caminho pode ser feito com operações de array como anexar em vez de manipulação de string (exigindo divisão e junção no caso de edição em algum lugar no meio).

  • o loop é simplesmente for i ($path) { … }sem a necessidade de lidar com a configuração do caractere de divisão correto.

3 fd0 Sep 06 2020 at 04:04

PATH é um valor escalar - uma sequência contínua de caminhos de pesquisa separados por dois pontos e caminho é uma matriz de caminhos de pesquisa. zshirá sincronizar o caminho e o PATH. Não há necessidade de você fazer isso.