csh

FreeBSD, xterm, csh i tytuł okna.

Posted by Maciej Suszko on April 04, 2011
FreeBSD / No Comments

Użytkownicy FreeBSD dobrze wiedzą, że powłok dostarczanych z systemem jest niewielki wybór, a w zasadzie tylko dwie – sh i (t)csh.

Można zadać sobie pytanie, dlaczego używać csh? – Otóż chociażby dlatego, że jest to domyślna powłoka użytkownika root, jest lekka i co najważniejsze – podczas aktualizacji świata będzie na pewno działać, w przeciwieństwie do wszechobecnego w najróżniejszych dystrybuacjach Linuksa, bash-a, czy ,,ciężarnego‘’ zsh zbudowanego z portów.

Dlaczego owe powłoki miałyby nie działać w takiej sytuacji – a właśnie dlatego:

tlhscd@arsenic:~ $ ldd /usr/local/bin/bash
/usr/local/bin/bash:
        libncurses.so.8 => /lib/libncurses.so.8 (0x8006e7000)
        libintl.so.9 => /usr/local/lib/libintl.so.9 (0x800834000)
        libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x80093d000)
        libc.so.7 => /lib/libc.so.7 (0x800b37000)

Po pierwsze primo – zależność od bibliotek, które również pochodzą z portów, a więc gdy ich wersje podskoczą odpowiednio do .10 i .4 – bash przestaje działać.
Po drugie primo, ultimo – podczas aktualizacji z jednego major release do następnego, zmianie ulec może również wersja np. libc.

Ponieważ (t)csh jest elementem tzw. świata, przy jego przebudowie nie ma obawy, że zostanie zlinkowany z nieaktualną biblioteką i tym samym przestanie się uruchamiać.

 

No dobra… do rzeczy, bo nie o tym miał być tekst – mnie osobiście zawsze denerwował fakt, że tytuł okna xterm nie zmieniał się przy logowaniu na zdalną maszynę (lokalnie – nazwa xterm od biedy wystarcza). Nie ma się co załamywać i zmieniać sobie powłoki (a tak – znam takie przypadki), tylko dopisać do .cshrc coś takiego:

if ($?TERM) then
    if ("$TERM" == "xterm") then
        set host=`hostname -s`
        alias precmd 'echo -n "ESC]0;${host}BEL"'
    endif
endif

Sekwencje ESC i BEL, używając vi, uzyskujemy przez kolejne naciśnięcia kombinacji klawiszy: Ctrl-v Ctrl-[ oraz Ctrl-v Ctrl-G (powinno to wyglądać jak ^[ i ^G).
Gdy ktoś używa mcedit – ten sam efekt powinno dać się osiągnąć przez: Ctrl-q ESC ESC oraz Ctrl-q G.

No to jeszcze na koniec jakiś ładniejszy prompt (jedna linia):

set prompt = "%{\033[1;32m%}%n%{\033[1;0m%}@%{\033[1;31m%}%m%{\033[1;0m%}:
              %{\033[1;32m%}%~ %{\033[0m%}$ "

Tags: , , ,