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!".


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.


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'

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.