Problema con $ PATH y archivo ejecutable

8

Tengo un archivo ejecutable de Unix ubicado en un directorio que generé. Creo que necesito tener este directorio en mi $PATHpara que el ejecutable de Unix sea ejecutable, pero la documentación del código fuente dice que necesito editar mi archivo de configuración de shell para agregarlo $home/meme/bina la ruta de mi shell.

Dr. Bunsen
fuente

Respuestas:

10

Si desea poder ejecutar un programa escribiendo su nombre en la línea de comando, el ejecutable del programa debe estar en uno de los directorios enumerados en la PATHvariable de entorno. Puede ver el valor actual de la variable de esta manera ( $es su solicitud, y el valor a continuación es un ejemplo):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Tienes varias opciones; mientras que el n. ° 1 y el n. ° 2 implican conceptos menos avanzados, recomiendo el n. ° 3, que es menos trabajo en la práctica:

  • Puede poner el ejecutable en un directorio que ya está en su PATH. Por ejemplo, si /home/drbunsen/binya está en su PATH, puede poner el ejecutable allí. O puede colocar el archivo ejecutable /usr/local/binsi desea que esté disponible para todos los usuarios.
  • Puede agregar el directorio donde está el ejecutable en su PATH. Edite el archivo ~/.profile( ~/significa que el archivo está en su directorio de inicio) (cree el archivo si no existe). Agregue una línea como esta:

    PATH=$PATH:$HOME/meme/bin
    

    (Tenga en cuenta que es $HOMEno, $home; UNIX es generalmente entre mayúsculas y minúsculas Puede también escribir. ~/meme/bin, ~Es un sinónimo de $HOMEcuando está en el comienzo de una ruta de archivo.) El cambio tendrá efecto la próxima vez que se conecte Puede escribir esto. misma línea en un terminal, y afectará el shell que se ejecuta en ese terminal y cualquier programa que se inicie desde él.

  • El enfoque que recomiendo es mantener el ejecutable con los otros archivos que forman parte del programa, en un directorio propio, pero tampoco cambiarlo PATH.
    Mantener el archivo ejecutable $HOME/memetiene la ventaja de que si alguna vez desea eliminar o actualizar el programa, todo está en un solo lugar. Algunos programas incluso requieren esto para encontrar los archivos que usan. No cambiar PATHtiene la ventaja de que instalar y desinstalar programas es menos trabajo.
    Para obtener lo mejor de ambos mundos, cree un enlace simbólico en un directorio en su PATH, apuntando al ejecutable real. Desde la línea de comando, ejecute un comando como este:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Eso es asumiendo que ~/binya está en tu PATH; si no es así, agréguelo ~/.profilecomo se indicó anteriormente. Elija otra ubicación si lo desea. Ahora, hacer que los programas estén disponibles es cuestión de crear enlaces simbólicos; hacer que no estén disponibles es una cuestión de eliminar los enlaces simbólicos; y puede rastrear fácilmente qué programas ha instalado manualmente y dónde viven mirando los enlaces simbólicos.

Gilles 'SO- deja de ser malvado'
fuente
Gilles, wow, muchas gracias por la explicación detallada. Realmente aprecio tu ayuda. Gracias por tomarse el tiempo para responder mi pregunta en detalle y en un nivel que hizo que todo fuera claro como el cristal.
dr.bunsen
Otra cosa que noté es que en el directorio home / meme / no parece haber un directorio / bin. ¿Necesito crear bin para poder hacer un enlace simbólico aquí a mi PATH? Gracias.
dr.bunsen
@ dr.bunsen ~/bines una ubicación común, y algunas distribuciones lo crean automáticamente. Si el tuyo no, tendrás que crearlo y agregarlo PATHmanualmente. La ubicación ~/bines solo una convención, puede elegir otro nombre si lo desea.
Gilles 'SO- deja de ser malvado'
El comando comodín no funciona porque ln interpreta el último elemento de la expansión como un directorio: "Uso: ln [OPCIÓN] ... [-T] TARGET LINK_NAME (1er formulario) o: ln [OPCIÓN] ... TARGET ( 2da forma) o: ln [OPCIÓN] ... OBJETIVO ... DIRECTORIO (3ra forma) o: ln [OPCIÓN] ... -t OBJETIVO DEL DIRECTORIO ... (4ta forma) "Para resolver esto, agregué" - t ./ "
adam.r
1
@ adam.r Escribí ln -s ../meme/bin/* ., no ln -s ../meme/bin/*. Parece que te perdiste un personaje al copiar el comando.
Gilles 'SO- deja de ser malvado'