Ejecute otro comando antes de ejecutar el comando que el usuario desea ejecutar


9

Digamos que quiero modificar el comportamiento original de la lsherramienta de esta manera:

$ ls
Hello World
file1 file2 ...

¿Cómo puedo hacer esto?

Al ejecutar, lsme gustaría ejecutar otro comando, digamos echo "Hello World!".

La solución rápida que veo es usar un alias:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Sin embargo, esta no es una solución real, ya que cuando la ejecute orig_lssaldrá "Hello World!".


Ponga otro ls en la ruta del usuario y utilícelo para enganchar el original.
peterh - Restablece a Mónica el

Respuestas:


12

A veces, un alias no es lo suficientemente poderoso como para hacer fácilmente lo que quieres, así que aquí hay una manera sin usarlos.

En algunos archivos que se obtienen cuando se inicia su shell (por ejemplo .bashrc), agregue la siguiente función:

ls () {
    echo "Hello world!"
    command ls "$@"
}

A diferencia de un alias, una función puede recurrir. Por eso command lsse usa en lugar de ls; le dice a su shell que use la función real en lslugar de la función que acaba de definir.


2
En efecto. Esta solución se escala mejor. +1
PythonNut

¿Cuál es la commandalternativa para OS X?
Ionică Bizău

@ IonicăBizău No tengo idea de commandque no funcionó: / No tengo idea y no tengo una Mac para probarlo, lo siento.
undergroundmonorail

9

No debes olvidarte de llamar ls:

alias ls='echo "Hello World!"; ls'

¡Decir ah! ¡Supuse que esto crearía un ciclo infinito! Pero, ¿por qué no crea un bucle infinito?
Ionică Bizău

1
En su lugar, puede probar alias ls 'echo "Hello World!"; / usr / bin / ls '
jamesqf

55
@ IonicăBizău cualquier "regla de expansión de alias" se usa solo una vez.
David Z

¿Unir los dos con un & también funcionaría? Eso también aseguraría que el comando del usuario solo se ejecute si el personalizado funciona, ¿verdad?
Financia la demanda de Mónica el

@QPaysTaxes Puedes usarlo de &hecho, pero no entiendo el argumento que haces de eso.
Hauke ​​Laging
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.