$PATH vs. $camino

Sep 06 2020

No recuerdo por qué, pero hace mucho tiempo, descubrí que, por alguna razón, necesitaba establecer ambas variables. No causó problemas en bash, pero ahora en zsh, cuando puse

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

(lo mismo que usé en .bashrc) en mi inicialización, obtengo

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

¿Qué quieren decir con "tipo" y para qué se usa $ path?

Respuestas

8 grg Sep 06 2020 at 04:09

El error al mencionar 'tipo' se refiere al tipo de datos de la variable, como cadena o matriz.

$PATHes una cadena, $pathes una matriz. No puede asignar una cadena, ya sea por variable o por literal, a una variable escrita para contener una matriz, ya que los tipos no coinciden.

En cuanto a cuál es la diferencia entre las dos variables: están destinadas a representar la misma lista de carpetas, pero en diferentes formatos. $PATHcontener /path/to/one:/path/to/twosignificaría que $pathel primer elemento es /path/to/oney el segundo es /path/to/two.

No debería necesitar administrar las dos variables (y asignar una a la otra no funcionará ya que los tipos no coinciden); el shell debe manejarlo por usted. Simplemente agregue a la $PATHcadena y la ruta que agregue debería existir como un elemento de $path.

Esto solo se aplica en zsh, heredado de *csh. Puede ver el 'enlace' entre las dos variables con typeset -p PATH.

$path ser una matriz es realmente conveniente:

  • se puede agregar y alterar la ruta con operaciones de matriz como agregar en lugar de la manipulación de cadenas (que requiere dividir y unir en el caso de editar en algún lugar en el medio).

  • recorrer en bucle es simplemente for i ($path) { … }sin necesidad de lidiar con la configuración del carácter dividido correcto.

3 fd0 Sep 06 2020 at 04:04

PATH es un valor escalar: una cadena continua de rutas de búsqueda separadas por dos puntos y la ruta es una matriz de rutas de búsqueda. zshsincronizará tanto la ruta como la ruta. No es necesario que lo haga.