¿Cómo se escribe una función en bash que ejecuta la orden que se da como argumento, dondefunción Bash mandato que llama da como argumento
- La orden dada puede ser un alias
- argumentos deben ser transmitido exactamente como se dio; sin evaluadora podrá hacerse
En otras palabras, cómo escribir un envoltorio funcionan como transparente-como-posible.
El objetivo de la función de envoltura podría ser, por ejemplo, establecer el directorio actual antes y después del comando dado, y/o establecer variables de entorno, o tiempo de duración del comando dado, ... Como un ejemplo simple aquí Tomo una función que solo imprime una línea y luego ejecuta el comando dado.
Un primer intento:
function wrap1 {
echo Starting: "[email protected]"
"[email protected]"
}
se podría utilizar como wrap1 echo hello
. Pero el problema es que no puede hacer alias myalias echo
y luego llamar al wrap1 myalias hello
: no resolvería el alias.
Otro intento usando eval
:
function wrap2 {
echo Starting: "[email protected]"
eval "[email protected]"
}
Ahora llamando funciona un alias. Pero el problema es que también evalúa los argumentos. Por ejemplo, wrap2 echo "\\a"
imprime solo a
en lugar de \a
porque los argumentos se evalúan dos veces.
shopt -s expand_aliases
parece que tampoco ayuda aquí.
¿Hay alguna manera de evaluar los alias como wrap2, pero aún así transmitir los argumentos directamente como wrap1?
Su primera función es el camino a seguir. Renunciar a manejar correctamente alias. ["Para casi cualquier propósito, las funciones de shell son preferibles a los alias."] (Http://www.gnu.org/software/bash/manual/html_node/Aliases.html#Aliases) –
[lectura obligatoria] (http://mywiki.wooledge.org/BashFAQ/050) –