Customizare prompt Bash
Posted on April 12th, 2008 in Linux, Developer | 2 Comments »
Iată o chestie marfă, cu care m-am jucat zilele trecute instalând Debian pe un sistem şi lovit de nevoia de a customiza prompt-ul de Bash - prompt-ul care totally kicks ass este cel din Gentoo, user@host cu light green si apoi calea full cu light blue şi separatorul $. Iată codul mai jos pentru asta:
export PS1=’\033[1;32m\u@\h\033[0m \033[1;34m\w\033[0m \$ ‘
Dude, WTF? Ce trebuie să ştii este că:
- sunt mai multe secvenţe escape care înlocuiesc: user-ul (\u), numele statiei (\h), ultimul director (\W), calea lungă (\w), timpul (\t), data (\d), contoare comenzi (\# şi \!) şi altele;
- pentru a defini formatarea, începi secvenţa de control cu \033[ şi o termini cu m - chiar aşa, gândeşte-l ca un tag de început, iar atributele se scriu cu ; între ele;
- “atributele” permise sunt nişte coduri ce definesc (un număr limitat de) culori pentru text (e.g. 32, 34), culori pentru fundalul textului, blinking text ş.a.;
- “tag-ul” pereche pentru încheierea definiţiei de stil are atributul 0; dacă nu închizi un tag, tot outputul viitor va fi formatat corespunzător, până shell-ul întâlneşte un bloc de reset (e.g. \033[0m);
- PS1 vine de la Prompt Shell 1, prompt-ul principal.
Linia descrisă mai sus se introduce în ~/.bashrc -ul fiecărui user. În funcţie de distribuţia folosită poţi găsi tot felul de variaţii, uneori un stil pentru root şi altul pentru userii obişnuiţi sau mai poţi găsi secvenţele substituite cu comenzi de genul $(whoami) sau $(hostname) sau variabile gândite anterior formării string-ului; de exemplu, am văzut un prompt unde calea curentă era scurtată cu (un script folosind) puncte de suspensie atunci când era prea mare. E OK daca veniţi cu propria definiţie pentru PS1 mai târziu în fişier şi suprascrieţi precedenta, nu uitaţi să daţi export din nou. Tot în funcţie de distribuţie, definiţia pentru PS1 poate fi în altă parte (în ~/.bash_profile, pentru toţi userii în /etc/profile etc.)
Pentru testing purposes, poţi emite definiţia la care lucrezi direct în shell şi astfel va fi valabilă doar în shell-ul curent (eu cream un subshell cu su intrând din nou cu userul meu şi daca ceva nu ieşea bine, făceam exit). Dar atenţie, jucându-te în shell cu aşa ceva poate să-ţi dea bătăi de cap pentru că shell-ul nu cunoaşte numărul exact de caractere din query-ul tău şi te trezeşti cu el intercalat pe ecran (o să-ţi dai seama despre ce vorbesc) şi atunci îmbraci tag-ul cu \[ şi \] indicându-l astfel ca non-printing character, ca mai jos:
export PS1=’\[\033[1;32m\]\u@\h\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] \$ ‘ # text posibil infasurat (wrapped)!
Pentru mai multe, poţi citi în documentaţia pentru Bash (vezi capitolele 2 şi 6), conţine şi o galerie de prompt-uri (unele au mult scripting în spate), mai spre sfârşit.
Notă: E posibil ca nu toate terminalele să recunoască toate secvenţele (deci posibil niciunul), caz în care nu sunt interpretate sau sunt output-ate ca atare pe ecran (nu am testat astfel de situaţii). Ca un fapt divers, în Putty nu este activat blinking text by default.
Popularity: 24%


Am văzut şi eu mult lăudatul 4 luni, 3 săptămâni şi 2 zile, filmul lui Cristian Mungiu, şi chiar am găsit că mi-a plăcut, cel mai mult cum a fost implementat suspansul acela - mă aşteptam ca din moment în moment să îi ridice Miliţia, să vină o cameristă peste fete, să iasă totul la iveală. Şi actorii joacă foarte bine: mi-a plăcut în special recepţionista de la primul hotel, care nu găsea rezervarea.


