Zostaw sobie notkę w katalogu...

Co robisz gdy chcesz zachować na przyszłość jakąś krótką informację np. sposób uruchomienia aplikacji, jej miejsce logowania, jakąś podpowiedź, informację gdzie leży backup, albo po prostu jednolinijkowca który robi trochę magii...?

Pokażę bardzo prosty sposób na zostawienie notatki, która zostanie wyświetlona po wejściu do konkretnego katalogu. Całość sprowadza się do napisania jednej funkcji (bash) oraz "przeciążenia" wywołania cd.

Nasza funkcja będzie wyglądać tak:

Jak to działa? Alias podmienia klasyczne cd, na naszą funkcję, która po wejściu do katalogu sprawdza czy nie ma w nim pliku o nazwie .msg i jeśli jest, to wyświetla jego zawartość.

Przykładowe wywołanie może być takie:

$ mkdir app
$ echo "uruchamiaj: ./aplikacja -z -t 123 -p 80 -xx -v" > app/.msg
$ cd app/
uruchamiaj: ./aplikacja -z -t 123 -p 80 -xx -v
$

Stworzyliśmy katalog app i umieściliśmy informację w pliku .msg, jeśli ktoś wykona cd app, zawartość pliku .msg zostanie wyświetlona.

Żeby funkcja i alias były ładowane po każdym zalogowaniu, możesz dodać całość do pliku .bashrc, lub globalnie dla wszystkich użytkowników do /etc/profile. Możesz też zapisać to w postaci pliku i ładować tylko w razie potrzeby poprzez wywołanie:

$ . plik_z_funkcją_i_aliasem

A jakie są Wasze sposoby? ;-)

  • merlin

    ln -s /dev/urandom .msg :P

  • @merlin:
    -f - true if file exists and is a regular file (man bash)

    in your face! ;P

  • merlin

    Ok, alko++ :P

  • kamil

    kiedy jednoczesnie chcesz używac notek w katalogu opisanych wyżej i rvm, niestety rvm nie dziala..

  • @Kamil:
    Bo Bash, jest taki, powiedzmy sobie, średni : ) Podobną rzecz, czyli nadpisywanie komendy cd robi RVM, więc pewnie jak są dwa takie hacki, to mu się miesza (nie testowałem, wierzę Ci na słowo : P). W zsh są hooki do poleceń (taki feature zsh), rvm nie nadpisuje cd, tylko tworzy hooka do niego. Tak samo tworzysz drugiego hooka z taką składnią jak w artykule i powinno śmigać : )

  • anula

    Już miałam zadać tu parę pytań które dogłębnie świadczyłyby o moim niskim stopniu wtajemniczenia w sekrety basha, ale jakoś udało mi się poradzić bez pytania i teraz za to mogę szpanować, że zauważyłam tu pewien błąd i (o dziwo!) wiem jak go poprawić :D

    Otóż, nadpisanie polecenia cd w sposób tu opisany sprawia (przynajmniej pod moim Ubuntu), że w ogóle nie da się dostać do katalogów ze spacją w nazwie, gdyż wywala się błąd w stylu (na przykładzie polecenia: cd "Various Artists"):
    bash: cd: Various: Nie ma takiego pliku ani katalogu
    Dzieje się to i gdy napiszę komendę tak:
    cd "Various Artists"
    i tak:
    cd Various Artists/

    Więc oto moje genialne rozwiązanie:
    builtin cd "$*";
    Po prostu wziąć $* w cudzysłowy.

    Wiem, wiem, że to jest zapewne dość oczywiste dla kogoś kto się na tym zna, ale a nuż jeszcze kiedyś wpadnie na ten blog taki żółtodziub jak ja, który będzie chciał jakoś wywoływać swoje skrypty przy wchodzeniu do katalogu, a wtedy ten komentarz mu się bardzo przyda ;)
    Pozdrawiam

  • @anula: dziękuję, bardzo fajnie to wyjaśniłaś ;-)