¿Los alias no se pueden ejecutar/ejecutar desde un script de shell? MacOS X Sierra 13.x

¿Los alias no se pueden ejecutar/ejecutar desde un script de shell? MacOS X Sierra 13.x

Entonces esta captura de pantalla básicamente lo explica.

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

Tengo algunos alias configurados para abrir una nueva pestaña dentro de la terminal y hacer otras cosas, incluso un alias para ejecutar el script de shell de depuración, pero el debug.shscript simplemente usa un alias, newtabpara intentar abrir una nueva pestaña, que funciona cuando simplemente se escribe newtab, pero no funciona, ni tampoco ningún otro alias, desde un .sh o cualquier otro archivo ejecutable, ¿cómo soluciono esto?

Una cosa que noté fue que estoy poniendo todas mis export'y alias' /etc/bashrcy no ~/.bash_profilelas otras, y apenas veo /etc/bashrcque se mencione en ninguna parte.

¿Lo estoy haciendo bien?

Respuesta1

La expansión de alias se realiza sólo desde el shell interactivo, pero no dentro de los scripts, por lo que debugse expande a newtab, pero newtabno se expande en sí, ya que se llama desde un script.

Si utiliza funciones exportadas en lugar de alias, funcionará: -

debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab

La exportación es necesaria, porque los scripts se ejecutan en subshells, aunque para el caso particular que usted cita, solo newtabdebe ser una función.

Se pueden usar funciones en lugar de alias en todas partes, pero pueden hacer mucho más, como agregar un parámetro adicional al final de la cadena de ejecución, un requisito muy simple que los alias no pueden cumplir. De hecho, pueden hacer cualquier cosa que los scripts puedan hacer, pero a diferencia de los scripts, se ejecutan en el shell actual, por lo que pueden cambiar el entorno y el directorio actual, para lo cual un script necesita .o sourceun comando para lograrlo.

información relacionada