Tengo una aplicación que al inicio abre un archivo relativo al ejecutable (esta ruta de archivo se compila estáticamente en el programa binario y no puedo modificarla). Quiero crear un alias que pueda ejecutarse desde cualquier parte del sistema sin primero "cd" en su carpeta para asegurarme de que se encuentre el archivo.
¿Es eso siquiera posible?
Respuesta1
Si el programa requiere que acceda cd
al directorio y el programa no se puede cambiar, no puede ejecutar ese programa sin cd
acceder a ese directorio. Es tan simple como eso.
Sin embargo, puede iniciar un segundo shell, que cd
va al directorio y ejecuta el programa. Cuando el programa finaliza, el segundo shell finaliza y, como el shell principal no lo hizo cd
, todavía estás en el mismo lugar.
Como ejemplo rápido:
$ alias ptmpdir="bash <<< 'cd /tmp ; pwd'"
$ ptmpdir
/tmp
Esto, como señaló Kamil Maciorowski en los comentarios, coloca el comando en el STDIN del shell. Esto funciona bien si el programa no usa STDIN, como pwd
en el ejemplo, y no busca errores.
alias lstmpdir="bash -c 'cd /tmp && ls' ls"
comprueba si hay errores y proporciona el código de salida correcto si cd
falla:
$ alias ptmpdir="bash -c 'cd /hop && ls' ls"
$ if ptmpdir ; then
> echo yes
> else
> echo no
> fi
ls: line 0: cd: /hop: No such file or directory
no
Si también desea pasar argumentos al comando, el alias se vuelve confuso y aún más difícil de entender. En ese caso. una función sería mejor:
$ hop(){ bash -c 'cd /tmp && exec ls "$@"' ls "$@" ; }
$ hop
7iCipjf8J7 eh._2700550 in.clean.1285563 tmp-ntt.xpi
MozillaMailnews <rest deleted>
$ hop -lrt
total 56496
drwxrwxr-x 3 ljm ljm 4096 Nov 5 17:28 gimp
drwxrwxr-x 2 ljm ljm 4096 Nov 5 18:14 jna-107183
-rw------- 1 ljm ljm 0 Nov 6 00:17 config-err-Ol5gyl
drwx------ 2 ljm ljm 4096 Nov 6 00:17 ssh-FqqWxHh4jhu8
<rest deleted>