
Tengo una aplicación que puedo ejecutar mientras estoy en la ubicación del archivo como se muestra a continuación:
-$ cd home/myApps/app
-$ ./run.sh
Quiero llamar a run.sh desde cualquier lugar de mi terminal sin estar en la ruta completa, intenté usar alais y agregar el siguiente código al archivo bashrc.
alias mylovleyapp=/home/myApps/app/run.sh
El problema es que cada vez que quiero ejecutar la aplicación usando mylovleyapp, el programa devuelve un error porque run.sh depende de otros archivos en la carpeta myApps.
¿Cómo puedo lograr eso?
Respuesta1
Hay muchas maneras de llegar a Roma.
Alias
Si prefiere un alias, puede hacerlo de la siguiente manera:
alias mylovleyapp='(cd home/myApps/app && ./run.sh)'
Las llaves (...)
hacen que los dos comandos se ejecuten en un subshell. Por lo tanto, su directorio actual no habrá cambiado una vez que el programa haya finalizado.
Un script contenedor en tu RUTA
En su lugar, puede crear un script contenedor y colocarlo en una carpeta que esté en su búsqueda PATH
, por ejemplo ~/.local/bin
, si ~/bin
usted es el único usuario que necesita acceso o /usr/local/bin
si todos los usuarios necesitan acceso. Luego todo lo que necesitas hacer es escribir el nombre del script para iniciar el programa.
El script puede ser exactamente lo que hace normalmente para iniciar el programa:
#!/usr/bin/env bash
cd home/myApps/app
./run.sh
Guarde ese script, por ejemplo, como ~/.local/bin/mylovleyapp
. Haga que el script sea ejecutable para que pueda ejecutarse:
chmod +x ~/.local/bin/mylovleyapp
Si ~/.local/bin
no existía y tuvo que crearlo, cierre sesión y vuelva a iniciarla para que se incluya automáticamente en su archivo PATH
. De ahora en adelante, con solo escribir mylovleyapp
en la terminal se ejecutará su aplicación.
Respuesta2
Como el OP no proporcionó un script de muestra, voy a crear uno. Hará una cosa. Ejecute ls
en el directorio del script.
Sí, sé que puedes prescindir
ls
del./
. Pero para este ejemplo, pretendo que es necesario demostrar un script que utiliza el directorio actual del script.
#!/usr/bin/env bash
ls ./
Guarde ese script en algún lugar. Lo guardaré como /home/ubuntu/test/myscript
. Hazlo ejecutable con chmod +x /home/ubuntu/test/myscript
. Ahora cd
al directorio donde está el script (por ejemplo, cd /home/ubuntu/test
) y ejecute el script con ./myscript
:
ubuntu@computer:~/test$ ./myscript
myscript someRandomFile
Hasta ahora, todo bien. Pero ahora ejecutémoslo desde un directorio diferente. Para este ejemplo, lo ejecutaré desde el directorio raíz ( /
).
ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin dev home lib lib64 lost+found mnt proc run snap sys usr
boot etc init lib32 libx32 media opt root sbin srv tmp var
Ups. Queríamos que imprimiera los archivos en la ubicación del script, no en la ubicación del usuario. Antes de encontrar la solución, piense enpor quéhace esto por un momento. La respuesta es simple. ./
es relativo aldel usuariodirectorio actual, no el del script.
Para obtener el directorio del script desde dentro del script, veremosesta pregunta de desbordamiento de pila.
La esencia es simple: script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
obtendrá el directorio actual del script y lo almacenará en la variable script_dir
.
Actualicemos el script en consecuencia. Nuestro script ahora es este:
#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"
Ejecutémoslo y veamos si funciona:
ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile
¡Funciona! Imprime los archivos en el directorio del script, incluso cuando no estás en el mismo directorio que el script. Hemos terminado. La idea general es simple. En el script, ./
se refiere al directorio del usuario. "$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
se refiere al directorio en el que se encuentra el script. Actualice su script en consecuencia y debería funcionar.
Respuesta3
Debe agregar la ruta de su aplicación a la variable PATH. Para hacerlo temporalmente, vaya al directorio donde está su aplicación y luego:
PATH=.:$PATH
Ahora puedes llamar a tu aplicación desde cualquier lugar sin tener que escribir la ruta completa. Si cierras el terminal esta configuración se perderá.
Para configurarlo de forma permanente, debe editar su archivo .bashrc y agregar :/home/myApps/app al final de su RUTA. Guarde el nuevo archivo .bashrc y luego:
source .bashrc
Respuesta4
Por lo tanto, debe cambiar su directorio de trabajo al que se encuentra la aplicación de destino y luego ejecutar la aplicación para que pueda encontrar los archivos dependientes.
Creo que puedes hacer esto dando dos comandos separados en el alias: uno para cambiar de directorio y el otro para ejecutar el programa, separados por un punto y coma.
Entonces tu .bashrc
adición debería decir:
alias mylovleyapp='cd /home/myApps/app; ./run.sh'
Eso supone que los archivos dependientes están en /home/myApps/app
... de lo contrario, puede cambiar el directorio de trabajo al que tiene los archivos dependientes y luego ejecutar la aplicación usando una ruta absoluta como segundo componente.