¿Qué son "$ PATH" y "~ / bin"? ¿Cómo puedo tener guiones personales?


29

¿Qué es $PATH?

¿Cómo puedo tener comandos / programas que solo están disponibles para mí?
He visto este camino ~/binmencionado anteriormente, pero ¿para qué se utiliza y cómo lo uso?


Estoy experimentando un poco porque esto es más preguntas frecuentes o material wiki que una "pregunta real". Se le solicitó porque mencioné ~ / bin en una respuesta anterior (en la barra lateral vinculada a la derecha) y alguien comentó cómo agregarlo a PATH: ahora, en lugar de breves comentarios, podemos vincular a esta publicación cuando ~ / bin es mencionado.

Respuestas:


26

$ PATH es una variable de entorno utilizada para buscar comandos. El ~ es su directorio de inicio, por lo que ~ / bin será / home / user / bin; Es un directorio normal.

Cuando ejecuta "ls" en un shell, por ejemplo, realmente ejecuta el programa / bin / ls; la ubicación exacta puede variar según la configuración de su sistema. Esto sucede porque / bin está en su $ PATH.

Para ver la ruta y encontrar dónde se encuentra cualquier comando en particular:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

Para tener su propio directorio bin privado, solo necesita agregarlo a la ruta. Haga esto editando ~ / .profile (un archivo oculto) para incluir las siguientes líneas. Si las líneas están comentadas, solo tiene que descomentarlas; si ya están allí, ¡ya está todo listo!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

Ahora necesita crear su directorio ~ / bin y, dado que .profile se ejecuta al iniciar sesión y solo agrega ~ / bin si existe en ese momento, debe iniciar sesión nuevamente para ver la RUTA actualizada.

Probémoslo:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
Una cosa a tener en cuenta cuando se usa es que solo encontrará comandos que son binarios en el sistema de archivos, no informa sobre la creación de shell, alias o funciones. A menudo, es más útil usarlo typepara ver cómo el shell resolverá un comando real; por ejemplo: which echoe type echoinformará cosas diferentes, whichdevuelve '/ bin / echo' pero 'type' devuelve que es un shell incorporado, que el shell preferirá al archivo en '/ bin'.
Steve Beattie

@ Steve Beattie, +1. whichse reemplaza mejor por typeo commanden shells interactivos, y es completamente inútil en scripts.
geirha 03 de

Una cosa a tener en cuenta que acabo de notar: la $HOMEvariable $PATHpor alguna razón no funciona, es decir, uno tiene que usar el ~signo en su lugar.
Hi-Angel

19

En cuanto a los ~/bincomandos / programas solo disponibles para su usuario

Las versiones recientes de Ubuntu incluyen el ~/bindirectorio en su $PATH, pero solo si el ~/bindirectorio existe.

Si no existe:

  1. Asegúrese de que su ~/.profilecontiene la siguiente estrofa (el valor predeterminado ~/.profileya lo tiene):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. Crea el ~/bindirectorio:

    mkdir -p ~/bin
    
  3. Reinicie su computadora u obligue a bash a volver a leer ~/.profile:

    exec -l bash
    

Gracias por el exec -l bashconsejo "reiniciar ". ¿Qué hace la -lbandera? No estoy encontrando una explicación en man exec.
evanrmurphy

3
exec -lejecutará bash como un shell de inicio de sesión [ wiki.bash-hackers.org/commands/builtin/exec] . En resumen, obliga a bash a volver a leer /etc/profiley ~/.profile. Solo ejecutar exec bashsolo volverá a leer ~/.bashrc.
Danilo Piazzalunga
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.