Cómo configurar el directorio relativo a la variable PATH y ejecutar scripts en el directorio relativo de manera global

0

Tengo algunos scripts en un proyecto de git al que debo acceder globalmente, así que agrego la ruta relativa a la carpeta de scripts como tal

vim ~/.bash_profile
export PATH="~/git/scripts/:$PATH"
source ~/.bash_profile

y hay un archivo ~/git/scripts/ llamado echoHelloWorld.sh , entonces, ¿cómo puedo ejecutar echoHelloWorld.sh si estoy, por ejemplo, en la carpeta ~/Downloads ? Hago yo

cd ~/Downloads
./echoHelloWorld

porque lo he intentado, pero no funciona, y también he intentado chmod +x echoHelloWorld.sh sin resultados.

    
pregunta the_prole 12.12.2018 - 00:25

3 respuestas

1

TL; DR

Tu declaración de ruta en ~/.bash_profile debería tener este aspecto:

PATH=$PATH:~/git/scripts/

Lo básico .....

Hay tres problemas con la forma en que lo escribiste:

  • No debería usar la función export ya que la variable ( PATH ) ya está en el entorno. Cuando inició sesión, la variable PATH se creó y configuró. No es necesario que export lo que ya existe.

  • Eliminar las comillas dobles. Las comillas dobles hacen que la ruta se lea literalmente, por lo que la expansión del directorio de inicio ~ nunca se lleva a cabo. Para que funcione la expansión de tilde, no se puede incluir entre comillas. Si desea verificar esto, en la línea de comandos escriba lo siguiente:

    $ PATH="~/git/scripts:$PATH"
    $ echo $PATH
    ~/git/scripts:/opt/local/bin:...                  <====== INCORRECT RESULT
    
    $ PATH=~/git/scripts:$PATH
    $ echo $PATH
     /Users/foouser/git/scripts:/opt/local/bin:.....  <====== CORRECT!
    
  • Las rutas de tilde expandidas (directorio personal de inicio) deben estar en el final de su declaración de ruta. Su camino se lee de izquierda a derecha, teniendo prioridad a medida que avanza. En otras palabras, si hay un comando / función en su directorio de inicio con el mismo nombre que algo ya en su PATH , se ejecutará (encontrará) primero y puede tener consecuencias no deseadas.

Una vez que realice el cambio en su ~/.bash_profile , puede reiniciar su sesión o simplemente realizar la fuente como lo hizo antes y los cambios se llevarán a cabo. Puede confirmar que funcionó emitiendo (o ambos) los siguientes comandos:

$ echo $PATH
$ which echoHelloWorld.sh

El primero emitirá el PATH como se estableció y el segundo le dirá dónde se encuentra su script en la ruta.

    
respondido por el Allan 12.12.2018 - 12:13
1

Si ha agregado la ruta del archivo para ejecutar a su variable PATH , puede ejecutar su comando directamente con

 echoHelloWorld.sh

independiente del directorio en el que se encuentre. Ejecutarlo como ./echoHelloWorld.sh en realidad le dice explícitamente al shell que ignore PATH y ejecute el script desde el directorio actual (donde no está disponible).

    
respondido por el nohillside 12.12.2018 - 09:17
0
  1. Necesitas hacer que tu comando sea ejecutable.

    chmod +x echoHelloWorld.sh 
    # verify it worked.
    ls -l echoHelloWorld.sh 
    
  2. edite su perfil, que a menudo es ~ / .bash_profile Agregue el directorio a su variable de ruta.

    # some people recommend putting your scripts at the end of path. 
    # Less risk of you accidentally overriding a system file name.
    PATH="$PATH:${HOME}/git/scripts/"
    
  3. Saldría de la sesión. No sabe si a su script de perfil le gustaría ejecutarse dos veces.

  4. inicia una nueva sesión

  5. ejecutado por

    echoHelloWorld.sh
    

Aquí está mi ejemplo:

$ oneApp
-bash: oneApp: command not found
$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Developer/Tools:/Users/mac/.nexustools
$ export PATH="~/oneFile:$PATH"
$ echo $PATH
~/oneFile:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Developer/Tools:/Users/mac/.nexustools
$ oneApp
Running oneApp
$ cat oneApp
cat: oneApp: No such file or directory
$ cat ~/oneFile/oneApp 
#!/bin/bash
echo "Running oneApp"
$ 
    
respondido por el historystamp 12.12.2018 - 05:19

Lea otras preguntas en las etiquetas