Ustawianie tymczasowych aliasów bash podczas wchodzenia do folderu

13

Czasami lubię mieć bardzo spersonalizowane aliasy bash i może skróty klawiszowe, kiedy wchodzę do folderu (może to być projekt, w którym jestem przyzwyczajony do pisania wielu poleceń z CLI).

Załóżmy, że kiedy wchodzę do folderu takiego jak „projectAlpha /”, oczekuję niestandardowych aliasów, takich jak:

  • alias doTaskX='./app arg1 arg2...|filter arg1 arg2...'
  • ...

Co więcej, myślałem o:

  • Wyświetl pomocny komunikat zawierający aliasy i popularne polecenia
  • Wyświetlanie typowych niestandardowych skrótów klawiszowych dla mojego projektu

Ale jak tylko opuszczę katalog główny mojego projektu, ustawienia te stają się niedostępne.

Jakie jest obecnie najlepsze podejście?

gzinho
źródło
przyszła myśl tutaj teraz, aby wykorzystywać jeden alias dla „cd” w ~ / .bashrc, jeden alias, aby wprowadzić w jednym katalogu i rozpoczyna nowy bash, który odczytuje ukryty .bashrc w katalogu ...
gzinho
Prawie duplikat: Wykonuj skrypty bash po wejściu do katalogu
Gilles 'SO - przestań być zły'

Odpowiedzi:

14

Bash ma specjalną zmienną, PROMPT_COMMANDktórej zawartość jest wykonywana za każdym razem po wykonaniu polecenia, więc możesz ustawić ją w następujący sposób:

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && { alias ll=ls; echo "Remember: ll=ls"; } || { unalias ll 2>/dev/null; }'

Od teraz za każdym razem, gdy będziesz w tym /tmpkatalogu ll, tworzony będzie alias , a we wszystkich innych katalogach będzie on usuwany.


Prawdopodobnie bardziej praktycznym rozwiązaniem jest zebranie wszystkich aliasów i innych elementów w jednej funkcji (powiedzmy makealias) i wszystkich niepodzielności w drugiej funkcji, makeunaliasktóre można uruchomić w zależności od potrzeb, coś w rodzaju

PROMPT_COMMAND='[[ "$PWD" = /tmp ]] && makealias || makeunalias 2>/dev/null'

Zauważ, że przekierowanie stderr jest obecne tylko po to, aby zapobiec niektórym bezużytecznym w tym przypadku alertom.

jimmij
źródło
ty, spróbuję. +1 (gdybym mógł)
gzinho
1
@ user3697611 Nie potrzebujesz żadnej reputacji, aby zaakceptować odpowiedź na swoje pytanie. Kliknij znacznik wyboru obok odpowiedzi.
Barmar