Eseguire un altro comando prima di eseguire il comando che l'utente desidera eseguire


9

Diciamo che voglio modificare il comportamento originale dello lsstrumento in questo modo:

$ ls
Hello World
file1 file2 ...

Come posso fare questo?

Quando lscorro, vorrei eseguire un altro comando, diciamo echo "Hello World!".

La soluzione rapida che vedo sta usando l'alias:

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

Tuttavia, questa non è una vera soluzione da quando eseguirò orig_lsverrà emesso "Hello World!".


Inserisci un altro l nel percorso dell'utente e usalo per agganciare l'originale.
Peter - Ripristina Monica il

Risposte:


12

A volte un alias non è abbastanza potente per fare facilmente quello che vuoi, quindi ecco un modo senza usarli.

In alcuni file che provengono all'avvio della shell (ad es. .bashrc), Aggiungi la seguente funzione:

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

A differenza di un alias, una funzione può ricorrere. Ecco perché command lsviene utilizzato al posto di ls; dice alla tua shell di usare l'attuale lsinvece della funzione che hai appena definito.


2
Infatti. Questa soluzione si ridimensiona meglio. +1
PythonNut

Qual è l' commandalternativa per OS X?
Ionică Bizău,

@ IonicăBizău Non ho idea che commandnon abbia funzionato: / Non ne ho idea e non ho un Mac con cui testarlo, scusa.
undergroundmonorail

9

Non devi dimenticare di chiamare ls:

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

Ha! Suppongo che questo creerà un ciclo infinito! Ma perché non crea un ciclo infinito?
Ionică Bizău,

1
Potresti invece provare l'eco di alias "Hello World!"; / usr / bin / ls '
jamesqf

5
@ IonicăBizău qualsiasi dato "regola di espansione alias" viene utilizzato solo una volta.
David Z,

Unire i due con un & anche lavorare? Ciò garantirebbe anche che il comando dell'utente venga eseguito solo se quello personalizzato funziona, giusto?
Finanzi la causa di Monica il

@QPaysTaxes Puoi &davvero usarlo ma non capisco l'argomento che fai da quello.
Hauke ​​Laging,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.