Trovare info sulla zsh non è stato semplicissimo, così ho pensato di scrivere un piccolo howto per rendervi partecipi dei progressi fatti.
Al contrario di quanto potrà sembrare dalla mole di testo che sto per incollare in questo thread, non sono un grand esperto di zsh, parallelamente alla stesura di questo howto ho imparato un sacco di cose. Spero sia utile anche per voi e che magari venga messo tra i thread in rilievo in modo che possa avere un compenso morale allo sbattimento fatto![]()
A questi indirizzi ho messo le due versioni online:
![]()
E qui invece inserisco la versione per il forum
ZSH HOWTO
(scritto da gianiaz)
PRE:
Cosa è ZSH?
ZSH è una shell alternativa alla famosa bash.
Potrebbe nascere spontanea una seconda domanda: cosa è una shell?
Se il kernel è il nucleo, la shell è il guscio (shell=guscio in inglese).
Per shell si intende l'interfaccia (testuale) tramite la quale l'utente può operare sul sistema.
Il guscio esterno, accessibile all'umano, con cui è possibile interagire con le funzionalità offerte dal kernel, interprete e gestore dell'hardware.
La shell è un programma che gestisce la comunicazione fra utente e sistema operativo interpretando ed eseguendo i comandi dell'utente (la shell viene chiamata anche command interpreter).
Perchè cambiare dalla bash alla zsh?
Questa è la domanda più naturale, ed è quella che mi sono sentito fare quando ho chiesto aiuto in alcune chat.
Posso dirvi i motivi che mi hanno spinto a provarla:
La mia innata curiosità :-)
Il sistema di completamento
INTRODUZIONE
Come avrete capito questo how to cercherà di spiegare le pecularietà di zsh, soprattutto dal punto di vista dell'utilizzatore della shell, e non dell'amministratore di sistema che deve utilizzare il linguaggio di scritpting della shell. Zsh ha un suo linguaggio di scripting degno di nota, che però in questo howto non viene trattato.
Innanzitutto ecco un paio di link utili:
Per il download in caso non aveste la fortuna di avere un gestore di pacchetti serio :-P
http://www.zsh.org
Le pagine man:
http://zsh.sunsite.dk/Doc/
La guida:
http://zsh.sunsite.dk/Guide/
Avete installato?
Ok
Se volete cominciare a notare le prime differenze dalla bash aprite un terminale(se siete in x) oppure da console digitate zsh.
Eccovi la vostra nuova shell.
Provate subito a digitare :
e poi premete in continuazione [TAB], noterete che a differenza della bash, che richiede l'inserimento di un carattere che discrimini tra più directory che cominciano con lo stesso carattere, la zsh permette di scorrere tra le diverse directory disponibili.codice:cd [TAB]
Aumentiamo la posta.
Digitiamo exit(tornando cosi alla nostra shell di partenza) e creiamo nella nostra home directory il file .zshrc e scriviamo queste 2 linee:
Adesso riproviamo a lanciare zsh e vediamo cosa abbiamo fatto inserendo le due linee sopra nel file .zshrc. Digitiamo :codice:autoload -U compinit compinit
quelle che vedete sono le opzioni disponibili del comando ls. Figata, no?codice:ls -[TAB]
altro esempio?
Per gli utilizzatori debian come il sottoscritto provate questa sequenza:
questo esempio è portato un po' all'estremo, ma che ne dite?codice:apt(8volte[TAB]) (9volte[TAB]) zs[TAB]
Per configurare in modo approfondito il completamento di zsh potete digitare
In questo modo avvieremo la funzione compinstall, che ci guiderà attraverso delle domande lungo il processo di configurazione del completamento automatico di zsh. Tutte le nostre scelte verranno aggiunte alle opzioni da noi gia inserite nel file .zshrc. Volendo tramite questa interfaccia potremo salvare anche un backup del nostro file zshrc.Per il momento non trattiamo questo argomento e proseguiamo.codice:compinstall
Oltre alle funzionalità di completamento zsh ha più di 150 opzioni da poter settare, ad esempio:
In questo caso l'opzione settata è cosi strutturata:codice:setopt autocd autopushd pushdignoredups
autocd indica che se al prompt inseriamo il nome di una dir seguita dal tasto [invio] è sottointesto il comando cd (change directory)
autopushd fa in modo che la directory in cui stiamo entrando venga memorizzata in uno stack di memoria.
pushdignoredups fa in modo che l'elenco di directory memorizzate nello stack grazie al comando precedente non contenga duplicati.
Ora, una volta inserita la linea precedente nel file .zshrc e riavviata la shell avremo una comodità in più. Poniamo l'esempio seguente:
Entriamo in ognuna delle directory (cisco, images, mp3), dopodichè con il comandocodice:dune% ls cisco images mp3 dune% cd cisco dune% cd .. dune% cd images dune% cd .. dune% cd mp3 dune% cd .. dune% dune% dirs -v 0 ~/howto 1 ~/howto/mp3 2 ~/howto/images 3 ~/howto/cisco 4 ~ dune% ~2 dune% pwd /home/gianiaz/howto/images
vedremo il famoso stack di memoria che contiene le directory a cui abbiamo fatto 'visita', senza doppioni (nel caso fossimo entrati più di una volta in una delle dir). La comodità di cui parlavo è la seguente:codice:dirs -v
digitando ~2 andremo a posizionarci alla dir corrispondente.
FILES DI CONFIGURAZIONE
Quando la zsh viene avviata vengono letti diversi files di configurazione a seconda del metodo con cui viene chiamata.
Ci sono diversi tipi di shells, la shell interattiva, la shell di login e la shell non-interattiva.
La shell non-interattiva è quella che viene eseguita quando essa viene richiamata da un file script (quelli che cominciano con una chiamata #!)
La shell interattiva è quella davanti alla quale ci troveremo più spesso una volta scelta zsh come shell di default (un esempio per tutti può essere la shell aperta da un terminale all'interno del server grafico).
La shell di login, è principalmente quella che ci viene mostrata all'avvio del sistema, con tanto di richiesta di nome utente e password.
Ognuna di queste shell diverse richiama al suo avvio e al suo termine diversi files di configurazione che possono eseguire diverse istruzioni all'avvio della shell.
La seguente tabella mostra i files caricati dalle diverse shell:
Da notare che la shell non-interattiva legge solo il file zshenv, quindi qualsiasi cambiamento di configurazione da cui dipende uno script di shell va messo qui (ad esempio la variabile PATH che dice alla shell dove andare a cercare i files eseguibili).
Una cosa da ricordare è che il file zshenv viene caricato ad ogni avvio di una qualsiasi shell, quindi è buona norma tenere al suo interno le configurazioni principali, e fare in modo che questo file sia più piccolo possibile, in modo da non rallentare l'avvio di una shell.
IL PROMPT
Il prompt è un'altra delle cose che si può personalizzare a piacere, sfortunatamente la variabile PS1 impostata per la bash non funziona cosi come dovrebbe in zsh. Quindi se hai un pormpt complesso dovrai riscriverlo per la zsh.
Prima di continuare vi mostro subito qual'è la stringa per rendere il prompt identico a quello preimpostato per la maggiorparte delle distribuzioni:
L'unica differenza è che il simbolo usato per identificare l'utilizzo da utente è il % a differenza della bash che usa il $.codice:%PS1="%n@%M:%~%#" gianiaz@dune:~%su Password: dune:/home/gianiaz#
Vi segnalo anche questo metodo per avere a disposizione alcuni prompt preimpostati, anche se sul mio pc con debian sid e zsh ver 4.0.9 in alcuni casi manda zsh in segmentation fault.
Se all'interno del nostro .zshrc inseriamo le seguenti 3 linee:
Avremo un prompt preimpostato chiamato clint.codice:autoload -U promptinit promptinit prompt clint
il cui risultato sarà questo prompt un po' esagerato nelle informazioni mostrate:
Per vedere gli altri disponibili digitate:codice:zsh/4 3 % [dom 04/02/08 08:22 CET][pts/5][i686/linux-gnu/2.4.24][4.0.9] <gianiaz@dune:~>
prompt -l
La comodità di avere un prompt preimpostato è quella di poter curiosare all'interno della variabile PS1.
Introduciamo cosi il comando 'vared' per vedere com'è impostata una variabile, e che ci permette la sua modifica al volo.
Prendiamo in considerazione il prompt precedente al momento, visto che è semplice da analizzare:
In questo modo vediamo come è impostata PS1, spostandoci con le frecce a destra e a sinistra potremmo muoverci all'interno della variabile e modificarla al volo: proviamo ad inserire il codice %* per vedere le modifiche del prompt al volo:codice:gianiaz@dune:~%vared PS1 %n@%M:%~%#
Per l'elenco di tutti i codici disponibili per impostare il prompt a vostro piacimento vi rimando alla pagina manuale:codice:gianiaz@dune:~%vared PS1 %n@%M:%~%*%# gianiaz@dune:~8:35:26%
alla sezione 'Prompt Expansion'codice:man zshmisc
La sezione del prompt appena sopra può indurre a pensare che la zsh e la bash siano incompatibili l'una con l'altra, in realtà sono molto comuni, e molte delle impostazioni della bash possono essere tranquillamente copiate nel file .zshrc per essere sfruttate. Un esempio potrebbe essere l'alias al comando ls che spesso troviamo preimpostato nelle distribuzioni, ovvero la possibilità di vedere il listato dei files codificato per colore per poter distinguere le directory dai files. Basterà andare a prelevare gli alias contenuti nel file ~/.bashrc e incollarli nel solito .zshrc. Ad esempio per ls che abbiamo appena citato inseriremo:
codice:alias ls=”ls –color”
CAMBIARE LA SHELL DI DEFAULT
Se siete rimasti impressionati dalla shell zsh come lo sono rimasto io probabilmente vorrete metterla come shell di default.
La shell di default è impostata nel file /etc/passwd:
Per cambiare la shell di default per l'utente corrente potremo semplicemente usare il comando chsh:codice:gianiaz:x:1000:1000:,,,:/home/gianiaz:/bin/bash
Al prossimo login la shell di default per l'utente gianiaz sarà zsh. Se dopo tutte queste prove avete un po' di confusione e non sapete quale shell state utilizzando digitate :codice:gianiaz@dune:~$ chsh Password: Changing the login shell for gianiaz Enter the new value, or press return for the default Login Shell [/bin/bash]: /bin/zsh gianiaz@dune:~$
e avrete di ritorno la shell che state usando.codice:gianiaz@dune:~%echo $0 zsh
----fine----(per il momento)----