1 votos

¿Cómo puedo usar un alias en una función?

En mi dotfiles tengo algunas de las funciones que dependen de alias o funciones de existir para ellos trabajar. Por alguna razón, no puede llegar a ellas para hacer referencia a otras funciones que he creado, pero no los alias para los comandos. ¿Cómo puedo solucionar este problema?

Ejemplo:

function open-dotfiles-commit(){ 
    xopen https://github.com/fatso83/dotfiles/blob/$1; 
}

Si tengo un alias xopen (alias xopen=xdg-open), el open-dotfiles-commit comando fallará xopen: cannot find command. Por otro lado, si puedo reemplazar la definición de alias con una función llamada xopen (function xopen(){ xdg-open; };) funciona!

Incluso he tratado de configuración shopt -s expand_aliases en el mismo archivo donde puedo definir el alias - sin éxito. El alias y funciones de archivo es leído por mi .bashrc.

3voto

Olorin Puntos 388

Desde el manual de bash:

Los alias se expanden cuando la definición de una función es leer, y no cuando el se ejecuta la función, porque la definición de una función es en sí mismo un comando.

Yo apostaría que su alias se definen a partir de estas funciones se definen. Pruebe la definición de las funciones más adelante.

Para la referencia, he probado foo () { ll "$1"; }, el uso de la ll alias predeterminados .bashrc, y funcionó bien.

Runnable ejemplo:

def-before() { do-foo; };    
alias do-foo="echo foo u!"    
def-after() { do-foo; };

def-before 
# prints "do-foo: Could not find command"

def-after
# prints "foo u!"

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: