Jak wywołać skrypt po każdym poleceniu bash


22

Czy w tym przykładzie można wywołać skrypt nazwany hey.shpo każdym poleceniu bash?

Na przykład wpiszesz lshit Enter i uruchomi się ls, a następnie hey.shuruchomi się.

Następnie wpisz cd .. (lub dowolne inne polecenie) , uruchomi się cd hey.sh, i tak dalej.


2
Jest to albo problem XY, albo bardzo dziwny pomysł; co naprawdę próbujesz osiągnąć?
jasonwryan

alias w bash.rc może?
moonbutt74

Odpowiedzi:


29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Jeśli jest ustawiony, wartość jest wykonywana jako polecenie przed wydaniem każdego głównego monitu.


Uwaga: Zmienne środowiskowe a zmienne powłoki

Domyślnie PROMPT_COMMANDjest nie zmienna . To tylko zmienna powłoki .

Dostęp do obu typów zmiennych można uzyskać w ten sam sposób ( "$variable*"), ale zmienne środowiskowe są dziedziczone przez procesy potomne, podczas gdy zmienne powłoki nie.

Konwencja polega na pisaniu wielkimi literami zmiennych środowiskowych + zmiennych powłoki, które konfigurują powłokę (PROMPT_COMMAND konfiguruje powłokę), ale inne typy zmiennych należy zapisywać małymi literami.

W bash możesz: declare -psprawdzić, czy zmienna jest eksportowana (= zmienna środowiskowa), czy nie:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@John Nie. Nie rób exporttego. Wystarczy go ustawić (lub dołączyć do niego, np. Jak pokazano powyżej).
PSkocik

Schludnie, a co potem?
moonbutt74

2
@ moonbutt74 przed każdym poleceniem == po każdym poleceniu + na początku sesji bash
PSkocik 14.01.16

@PSkocik Mam gotcha Byłem ciekawy, czy to już zmienna środowiskowa, po szybkim poleceniu echa odkryłem, że tak jest. To robi dokładnie to, czego szukałem
Jana

@John Domyślnie jest to tylko zmienna powłoki, a nie zmienna środowiskowa.
PSkocik,
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.