Directorios de búsqueda de terminales OSX

0

Vengo de usar Cygwin en Windows, y acabo de comenzar a usar una Mac. Me pregunto por qué parece que las rutas de búsqueda no funcionan como deberían.

Si tengo un programa /usr/bin/progy lo elimino. Parece seguir intentando esa ruta exacta en lugar de buscarla nuevamente (digamos que la muevo a /usr/local/bin).

¿Esto se debe a la aplicación de terminal o es algo específico para mac? Además, si quiero instalar una nueva versión de Python /usr/local/bin, ¿es la forma correcta de hacerlo para eliminarlo /usr/bin/?

vonhogen
fuente

Respuestas:

3

No dice qué shell está utilizando, aunque su pregunta está etiquetada bash. El shell predeterminado de Mac OS X es tcsh, que si está utilizando tcsh o csh, almacenan en caché una tabla de elementos en su ruta. Para actualizar la tabla, emita el rehashcomando en el indicador de comandos de shell.

Deberá hacer esto cada vez que mueva o elimine un ejecutable, o si agrega algo a su ruta.

Si realmente está usando el bashshell, esto no se aplica.

Eric
fuente
1
El shell predeterminado de Mac Os X no tschlo es bash. (Solía ​​estar de vuelta en 10.2.x) Cambió después de 10.3.x
ocodo
Ooooops ... Pensé en eso más tarde. Cambié mi shell predeterminado a tcsh hace tanto tiempo que lo olvidé. Sin embargo, el comportamiento que está viendo verhogen se explica claramente por el comportamiento tcsh / csh que llegué a esa conclusión
Eric
2

El terminal OS X probará las rutas declaradas en su variable PATH, en orden, hasta que la encuentre o se quede sin lugares para verificar. Puede verificar cuál es su variable PATH escribiendo lo siguiente en el símbolo del sistema:

echo $PATH

Puede ejecutar lo siguiente desde el símbolo del sistema para ver dónde su shell encuentra el programa en cuestión:

which prog

Si desea actualizar Python, le recomiendo instalarlo en la misma ubicación que ya existe. Si desea tener más de una versión instalada en su máquina a la vez, instalarlo en / usr / local / bin sería una opción lógica IMO.

Hola YWCA
fuente
Eso es lo que debería suceder, pero si ejecuta gity luego lo elimina usr/bin, no parece buscar de nuevo. Simplemente sigue intentando correr /usr/bin/git.
vonhogen
Pruebe en un nuevo shell para comprobar que no se ha almacenado en caché. También puede usar printenv para verificar si hay algo extraño en su entorno
0

Por lo que entiendo cuando ejecuta un programa, buscará las carpetas en su variable $ PATH, que está separada por ":" por ejemplo.

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin

¿Tu $ PATH está configurado correctamente? Para descubrir esto, use:

echo $PATH

También puede usar qué python para encontrar qué versión y desde dónde se está ejecutando. Creo que esto también es una búsqueda de izquierda a derecha, por lo que tomará el primer programa llamado python que encuentre en el camino.

Jim
fuente
0

En lugar de usar

which prog

puedes usar el Bash incorporado

type -P prog

# some examples using: type -P cmd
$(type -P prog) arg1 arg2 arg3 ...
myls=$(type -P ls) && $myls -l

Para más información, ver

help type

# The -P flag forces a PATH search for each NAME, even if it is an alias,
# builtin, or function, and returns the name of the disk file that would
# be executed.

Otra opción más podría ser intentar

help command
command -p prog

HTH


fuente