2010-07-29 15 views

Odpowiedz

17

Najprostszym rozwiązaniem mogę wymyślić jest to

myfunction() { 
    if [ "$PWD" != "$MYOLDPWD" ]; then 
    MYOLDPWD="$PWD"; 
    # strut yer stuff here.. 
    fi 
} 

export PROMPT_COMMAND=myfunction 

To powinno wystarczyć. Będzie działać z wszystkimi poleceniami i zostanie wywołany przed wyświetleniem monitu.

+1

Po prostu dodaj 'printf" \ e] 1; $ PWD \ a "' i bam (!), Nazwa karty zmieni się na pwd. – Fadi

+0

@Fadi podczas true, większość ludzi po prostu dodaje sekwencję uniksową do samego monitu, nie ma to znaczenia, że ​​jest aktualizowany przy każdym monicie (a nie tylko przy zmianie katalogu), ponieważ nie będzie to zauważalne. – falstro

2

Napisałem scenariusz ZSH wykorzystujący funkcję wywołania zwrotnego chpwd do źródła konfiguracji ZSH konkretnego projektu. Nie jestem pewien, czy działa z Bash, ale myślę, że warto spróbować. Jeśli nie znajdzie pliku skryptu w katalogu, do którego dołączasz, sprawdza katalogi nadrzędne, dopóki nie znajdzie skryptu źródłowego (lub dopóki nie dotrze do /). Wywołuje również funkcję unmagic podczas wyłączania katalogu, co pozwala oczyścić środowisko po opuszczeniu projektu.

http://github.com/jkramer/home/blob/master/.zsh/func/magic

przykład o "magicznym" skryptu:

export BASE=$PWD # needed for another script of mine that allows you to cd into the projects base directory by pressing ^b 

ctags -R --languages=Perl $PWD # update ctags file when entering the project directory 

export PERL5LIB="$BASE/lib" 

# function that starts the catalyst server 
function srv { 
    perl $BASE/script/${PROJECT_NAME}_server.pl 
} 

# clean up 
function unmagic { 
    unfunction src 
    unset PERL5LIB 
} 
+0

Wygląda na to, że nie istnieje. –

16

Pseudonimy nie akceptują parametrów. Powinieneś użyć funkcji. Nie ma potrzeby wykonywania go automatycznie za każdym razem, gdy zostanie wyświetlony monit.

function cd() { builtin cd "[email protected]" && myfunction; } 

builtin słów kluczowych pozwala na przedefiniowanie Bash wbudowanego bez tworzenia rekursji. Cytowanie parametru powoduje, że działa on w przypadku, gdy w nazwach katalogów znajdują się spacje.

Bash docs powiedzieć:

dla prawie każdego celu, funkcje powłoki są bardziej korzystne niż aliasów.

+0

nie obejmuje jego obawy o pushd, popd itp .; i wykonanie funkcji dla każdego przypadku czyni ją bardziej skomplikowaną niż polecenie polecenia. – falstro

6

Istnieje kilka innych wersjach tego tam, w tym

  • smartcd, co napisałem, i ma mnóstwo funkcji, w tym szablonów i zmiennej czasowej zbawczej
  • ondir, który jest mniejszy i znacznie prostsze

Oba obsługują zarówno bash i zsh

+0

Och, stary, ten smartcd wygląda wyśmienicie! – mihai

Powiązane problemy