Uruchom inne polecenie przed uruchomieniem polecenia, które użytkownik chce uruchomić

9

Powiedzmy, że chcę zmodyfikować oryginalne zachowanie lsnarzędzia w ten sposób:

$ ls
Hello World
file1 file2 ...

W jaki sposób mogę to zrobić?

Podczas uruchamiania lschciałbym uruchomić inne polecenie, powiedzmy echo "Hello World!".

Szybkim rozwiązaniem, które widzę, jest użycie aliasu:

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

Jednak nie jest to realne rozwiązanie, ponieważ kiedy uruchomię orig_ls, wyświetli "Hello World!".

Ionică Bizău
źródło
Umieść kolejną ls na ścieżce użytkownika i użyj tego, aby zaczepić oryginał.
Peter - Przywróć Monikę

Odpowiedzi:

12

Czasami alias nie jest wystarczająco silny, aby łatwo robić to, co chcesz, więc oto sposób, aby ich nie używać.

W niektórych plikach pozyskiwanych podczas uruchamiania powłoki (np. .bashrc) Dodaj następującą funkcję:

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

W przeciwieństwie do aliasu funkcja może się powtarzać. Dlatego command lsjest używany zamiast ls; mówi twojej powłoce, aby użyła rzeczywistej lszamiast właśnie zdefiniowanej funkcji.

podziemny monorail
źródło
2
W rzeczy samej. To rozwiązanie skaluje się lepiej. +1
PythonNut
Jaka jest commandalternatywa dla OS X?
Ionică Bizău
@ IonicăBizău Nie mam pojęcia, commandnie zadziałało: / Nie mam pojęcia i nie mam komputera Mac, z którym można by to przetestować, przepraszam.
undergroundmonorail
9

Nie zapomnij zadzwonić ls:

alias ls='echo "Hello World!"; ls'
Hauke ​​Laging
źródło
Ha! Przypuszczałem, że stworzy to nieskończony cykl! Ale dlaczego nie tworzy nieskończonej pętli?
Ionică Bizău
1
Zamiast tego możesz wypróbować echo aliasu ls „Hello World!”; / usr / bin / ls '
jamesqf
5
@ IonicăBizău każda podana „reguła rozszerzenia aliasu” jest używana tylko raz.
David Z
Czy połączenie tych dwóch elementów z działaniem & też też zadziała? Zapewniłoby to również, że polecenie użytkownika jest uruchamiane tylko wtedy, gdy niestandardowe działa, prawda?
Pozew Fund Moniki w dniu
@QPaysTaxes Rzeczywiście możesz użyć, &ale nie rozumiem, z czego się wywnioskujesz .
Hauke ​​Laging