¿Cómo puedo hacer que un programa sea ejecutable desde cualquier lugar?

76

¿Qué debo hacer si quiero poder ejecutar un programa determinado independientemente de mi directorio actual? ¿Debo crear un enlace simbólico al programa en la /bincarpeta?

aneuryzm
fuente
55
no, deberías usar la variable PATH del shell.
msw
77
Creo que estaría bien crear una ~/bin/carpeta personal , agregar ESO a su ruta y crear enlaces simbólicos en esa carpeta a cualquier cosa que quisiera que fuera ejecutable desde cualquier lugar.
frabjous
1
También puede establecer un alias con la ruta completa al binario que desea ejecutar.
datasmurf

Respuestas:

53

Si solo escribe export PATH=$PATH:</path/to/file>en la línea de comando, solo durará la duración de la sesión.

Si desea cambiarlo permanentemente, agréguelo export PATH=$PATH:</path/to/file>a su archivo ~ / .bashrc (solo al final está bien).

oadams
fuente
11
Gracias funciona. Para los novatos como yo, recuerde omitir los corchetes angulares <>. Como así: $ PATH: / your / file / path
SAm
44
Tampoco incluya el nombre del archivo del programa en la ruta.
Olli Niemitalo
23

La respuesta corta es que para ejecutar el programa, no importa cuál sea su directorio, debe tener el directorio del programa en su ruta de búsqueda. El problema puede resolverse colocando el programa en una carpeta que ya está en esa ruta, o agregando una nueva carpeta a la ruta, ya sea que funcione. La mejor respuesta depende de:

¿Es este programa un programa descargado que usted mismo ha compilado desde la fuente?

Es muy probable que ya tenga un mecanismo de instalación. En la carpeta que compiló el programa, como root, ejecute 'make install'

¿Es este programa un programa descargado que desea que esté disponible como parte de los programas estándar en la computadora?

Tiene sentido poner este tipo de aplicación en una carpeta estándar. es bastante común usar directorios como / usr / local / bin para dichos programas. Necesitará acceso de root para hacer esto.

Este es un programa que ha escrito para usted y / o no tiene privilegios especiales en la computadora.

Creando una carpeta en su directorio de inicio llamada 'bin', y colocando el programa allí. Es posible que deba editar su secuencia de comandos de inicio de sesión para agregar la ruta completa a esta carpeta (por ejemplo, / usr / home / jeremy / bin)

Si bien puede agregar su directorio actual a la ruta de búsqueda, tendrá que seguir haciéndolo con cada nuevo programa, y ​​es más trabajo a largo plazo.

Michael Shaw
fuente
15

Colocar un enlace al archivo en el /bindirectorio no es lo mejor por múltiples razones.

  • Si el archivo ejecutable real está en una ubicación que algunos usuarios no pueden ver o ejecutar, lo ven como un enlace defectuoso o un programa disfuncional.
  • El /bindirectorio se supone que debe ser reservada para programas que son necesarios para el funcionamiento del sistema (cosas como chmod, mkdir, etc.).

En realidad, puede colocar (instalar) el archivo ejecutable /usr/bin/o incluso /usr/local/bin/. Por supuesto, ha instalado manualmente el programa en ese punto; su distribución no hará un seguimiento de la misma manera que lo hace con el resto de sus programas: tendrá que actualizarla manualmente cuando sea necesario y eliminarla manualmente si desea que desaparezca. Además, tendrá que saber de qué paquetes depende (parece que ya usa el programa, por lo que se encarga, pero en general ...).

A menos que esté configurando un programa que espero que otros usuarios usen, eso no es lo que suelo hacer: creo un directorio bin solo para mí en mi directorio de inicio y edito mi perfil de shell para agregarlo ~/bin/a mi PATHvariable de entorno. Me resulta más fácil hacer un seguimiento de los programas que he instalado de esa manera, porque está separado del resto del sistema.

Shawn J. Goff
fuente
6

Si desea ejecutar un comando fooen el directorio en el que se encuentra actualmente su shell, básicamente tiene dos opciones:

  1. Escriba ./fooen el símbolo del sistema.

  2. Agregue el .directorio ( .es un nombre para "el directorio actual") a la PATHvariable de entorno; cómo hacerlo depende del shell que esté utilizando:

    • para los shells de tipo Bourne (bash, zsh, ksh, etc.) que escriba (consulte esta página para obtener más información):

      export PATH=$PATH:.
      
    • para shells de tipo csh (tcsh, csh) que escriba (consulte esta página para obtener más información):

      set path = ( $path .)
      

Tenga en cuenta que 2. es un riesgo de seguridad en los sistemas multiusuario: imagínese cdal directorio /tmpy un usuario malintencionado ha creado un binario de malware nombrado lsallí.

Riccardo Murri
fuente
2
Sí, creo que las opciones te muestran que Unix te permite hacer cosas, eso se considera una mala práctica. Sumando a su camino también puede crear otros efectos secundarios que generalmente son malos.
The Unix Janitor
1

Jugar con esto PATHte permite ejecutar programas maliciosos por error. El estándar es instalar cosas "locales" debajo /usr/local(ver FHS , que codifica el uso de Unix: un poco anticuado pero da una justificación)., /usr/local/binGeneralmente está en el PATHpara todos los usuarios.

Mis programas "instalados localmente" se encuentran $HOME/bin, configurados en el baile estándar ./configure --prefix=$HOME ..., junto con algunos alias (bash) para elegir, por ejemplo, git autoconstruido sobre el sistema uno (los que no chocan se encuentran PATHal final).

vonbrand
fuente