problema de shell:alias no se expande
Pregunta
Tengo el siguiente problema:Tengo muchos scripts de prueba que se están ejecutando actualmente usando Kit de herramientas MKS.Logramos ejecutar esos scripts usando el shell mingw (msys) pero hay otros scripts que hacen uso de algunos alias
es que están integrados en MKS Toolkit y no en bash.
El problema es que nadie quiere cambiar esos scripts, ni siquiera automáticamente mediante el uso de un script.Esto significa que debo definir y usar esos alias.Intenté definir los alias en el archivo "/etc/profile" del shell msys pero sin éxito.También intenté usar shopt -s expand_aliases
(en "/etc/profile") pero eso tampoco funciona.
¿Alguien podría compartir una idea sobre cómo se podría hacer esto?Tenga en cuenta que los guiones existentes tendrán que seguir siendo los mismos.
Cualquier pensamiento o idea es bienvenido.
Gracias
Solución 2
esta respuesta me dio la solución.Implica definir la variable BASH_ENV
antes de ejecutar
bash script_name.sh
BASH_ENV apuntará a un script que establece el entorno del shell.En mi caso, para exportar el alias
es y también las funciones necesarias, el script se ve así:
shopt -s expand_aliases
alias my_alias="echo my_alias"
function MyFunction {
echo "MyFunction(DUMB):" $*
}
export -f MyFunction
Otros consejos
El /etc/profile
solo se obtiene para shells de inicio de sesión.Si desea los alias en su secuencia de comandos, debe colocarlos en un archivo separado y obtenerlos en las secuencias de comandos que los necesitan.Por ejemplo:
alias.sh:
alias walrus="echo coo coo cah joo"
guión.sh:
#!/bin/bash
shopt -s expand_aliases
. aliases.sh
walrus
y luego
$ ./script.sh
coo coo cah joo
Probablemente esa sea la forma más razonable de hacerlo.Si insistes en no cambiar los guiones en absoluto, entonces es posible que puedas ejecutarlos indirectamente como:
bash --rcfile aliases.sh -i script.sh
Eso le indicará a bash que ejecute un shell interactivo (y así expandir los alias y obtener nuestro script de alias antes de ejecutar script.sh).