|
|
(11 versioni intermedie di 5 utenti non mostrate) |
Riga 1: |
Riga 1: |
| ==Intro== | | =Contatti= |
| '''GNU Bash''' � la shell *nix probabilmente pi� ricca di funzionalit� sia per l'uso interattivo che per lo scripting. Spesso per� molte funzioni sono poco note. | | ; e-mail : [http://www.sailence.com/jango/?page_id=4 e-m@il me!] |
| | ; www : [http://www.sailence.com/jango Visita il mio blog!] |
| | ; coordinate : [http://www.casale.cc/wallpapers/gifs%5Cc21126_foce.jpg 44°23'20" N 08°56'25" E] |
|
| |
|
| Questa pagina ha lo scopo di raccogliere il pi� ampio numero di "trucchi" pi� o meno noti riguardanti Bash, senza avere peraltro la pretesa di coprire tutte le funzionalit�.
| | =Su questo Wiki:= |
|
| |
|
| ==Per iniziare== | | ==Guide:== |
| Prima di iniziare non posso non segnalare altre due guide presente sul wiki che danno dei tip molto utili su Bash:
| | # [[Associare ad Icedove il browser preferito]] |
| | # [[Associare a Thunderbird il browser preferito]] |
| | # [[Old:Associare un pulsante ad un'azione: Hotkeys|Old:Associare un pulsante ad un'azione: '''Hotkeys''']] |
| | # [[Cambiare il Tema dei Cursori per il Mouse ]] |
| | # [[Debian e iPod]] |
| | # [[Debian on an HP pavilion zv5422EA]] |
| | # [[NdisWrapper]] |
| | # [[Xfce e shutdown da utente]] |
|
| |
|
| * [[Come abilitare il completamento automatico 'avanzato']]
| | ==Contributi:== |
| * [[Colorare bash]]
| | [[Speciale:Contributions/jango|Clikka Qui]] |
|
| |
|
| ==Shell Interattiva== | | ==Discussioni:== |
| In questa sezione verranno elencate funzionalit� riguardanti l'uso interattivo di Bash.
| | [[Discussioni_utente:jango|Clikka Qui]] |
| | |
| ===Navigare velocemente tra le directory===
| |
| * Per andare sulla propria '''home''' basta digitare il comando '''cd''' senza nessun paramentro.
| |
| * Per tornare indietro alla precedente directory visitata � sufficiente il comando '''cd -'''
| |
| * E possibile salvare un percorso con '''pushd''' e richiamarlo con '''popd'''. In realt� questi comandi (come il nome pu� fare intuire) implementano una coda FIFO (First In First Out) nella quale � possibile memorizzare un numero illimitato di percorsi per poi richiamarli dall'ultimo inserito in poi. Usare questi comadi � semplicissimo: basta usare '''pushd''' al posto di '''cd''' (in tal modo si memorizzano i percorsi via via visitati) e poi digitare '''popd''' una o pi� volte per tornare indietro.
| |
| | |
| ===Riutilizzo degli argomenti===
| |
| Bash memorizza l'ultimo argomento del comando precedente in una speciale variabile chiamata $_. E' possibile fare riferimento all'ultimo argomento dell'ultimo comando usando direttamente $_ ma la via di gran lunga pi� veloce � comoda � usare 'ESC .'.
| |
| | |
| Ecco un esempio stupido, creare un directory ed entrarvi:
| |
| <pre>
| |
| $ mkdir /usr/local/nuovo-programma
| |
| $ cd ESC.
| |
| </pre>
| |
| | |
| Altro esempio forse un p� pi� utile, creare velocemente uno script:
| |
| <pre>
| |
| $ :> /usr/local/bin/nomescript
| |
| $ chmod +x ESC.
| |
| $ gvim ESC.
| |
| </pre>
| |
| | |
| ===Editing della linea di comando===
| |
| Alcuni tasti di scelta rapida per l'editing da linea di comando:
| |
| : '''<tt>CTRL+a</tt>''': Vai all'inizio delle linea
| |
| : '''<tt>CTRL+e</tt>''': Vai alla fine della linea
| |
| : '''<tt>CTRL+k</tt>''': Cancella fino dalla posizione corrente alla fine della linea
| |
| : '''<tt>CTRL+u</tt>''': Cancella fino dalla posizione corrente all'inizio della linea
| |
| : '''<tt>CTRL+l</tt>''': Pulisce lo schermo
| |
| : '''<tt>META+f</tt>''': Vai una parola avanti
| |
| : '''<tt>META+b</tt>''': Vai una parola indietro
| |
| : '''<tt>META+d</tt>''': Cancella la parola successiva
| |
| : '''<tt>META+backspace</tt>''': Cancella la parola precedente
| |
| | |
| {{Box|Nota sul tasto META|Il tasto Meta pu� essere usato premendo ALT e ''contemporaneamente'' il carattere del comando che interessa, oppure premendo ESC e ''successivamente'' il tasto del comando che interessa. In quest'ultimo modo non � necessario permere due tasti conemporaneamente. Questa � una regola generica per gli shortcut di bash che usano il tasto Meta.}}
| |
| | |
| ===Uso avanzato dello storico===
| |
| Come noto Bash memorizza gli ultimi (solitamente 500 ma il numero � impostabile in $HISTSIZE) comandi digitati ai quali � possibile accedere semplicemente con le freccette SU e GIU. Tuttavia � possibile effettuare molte altre operazioni per ricercare nello storico dei comandi.
| |
| | |
| ====Ricerca incrementale inversa====
| |
| Sotto questo astruso nome si cela la possibilit� di ricercare nello storico dei comandi semplicemente premendo CRTL+r e digitando qualche carattere del comando cercato. Verr� immendiatamente mostrato l'ultimo comando che soddisfa i criteri di ricerca. Se pi� comandi soddisfano la ricerca � possibile scorrerli (dall'ultimo al primo) premendo nuovamente CTRL+r.
| |
| | |
| Una volta trovato il comando lo si pu� eseguire con INVIO oppure editare con CTRL+j.
| |
| | |
| ====Ricerca nella cronologia====
| |
| Altra possibilit� � cercare tra tutti i comandi precedenti che cominciano con un certo gruppo di lettere.
| |
| | |
| Questa funzionalit� non � abilitata di default; bisogna modificare il file /etc/inputrc (o creare un analogo file .inputrc nella propria home), aggiungendo le righe:
| |
| | |
| <pre>
| |
| # PgUp/Down searches history in bash
| |
| "\e[5~": history-search-backward
| |
| "\e[6~": history-search-forward
| |
| </pre>
| |
| | |
| In questo esempio si � scelto di usare i tasti PGUP e PGDOWN.
| |
| Da notare che il file inputrc contiene altre comodit� pronte all'uso: basta decommentarle!
| |
| | |
| ====Accesso diretto====
| |
| Il carattere ! permette di richiamare un preciso comando dello storico:
| |
| | |
| <pre>
| |
| $ !-3
| |
| </pre>
| |
| | |
| richiama ed esegue il terzultimo comando, mentre:
| |
| | |
| <pre>
| |
| $ !ta
| |
| </pre>
| |
| | |
| richiama ed esgue l'ultimo comando che comincia con '''ta''' (potrebbe essere: tail -f /var/log/messages). Il '''!!''' richiama invece l'ultimo comando.
| |
| | |
| Se si vuole richiamare il comando ma non eseguirlo si pu� usare il modificatore :p (''print''), ad esempio
| |
| | |
| <pre>
| |
| $ !ta:p
| |
| </pre>
| |
| | |
| stampa l'ultimo comando che inizia con ''ta''.
| |
| | |
| Per richiamare l'ultimo comando che contiene una certa parola (non all'inizio):
| |
| | |
| <pre>
| |
| $ !?parola?
| |
| </pre>
| |
| | |
| E' possibile anche richiamare un parametro di un comando usando ''':''' seguito dal numero del parametro (0 indica il comando stesso). Ad esempio:
| |
| | |
| <pre>
| |
| $ man !-1:0
| |
| </pre>
| |
| | |
| visualizza la pagina di manuale dell'ultimo comando.
| |
| | |
| Per eseguire un comando con gli stessi argomenti del comando precedente:
| |
| | |
| <pre>
| |
| $ nuovocomando !!:1*
| |
| </pre>
| |
| | |
| ==Bash Scripting==
| |
| In questa sezione verranno elencati alcuni brevi tip per lo scripting Bash. Questa non vuole essere assolutamente una guida completa, ma pi�ttosto un elenco di costrutti per lo scripting bash particolarmente eleganti, curiosi e/o poco noti.
| |
| | |
| ===Variabili speciali===
| |
| | |
| ; $? : Contiene il valore di uscita dell'ultimo comando o funzione. Il comando ha successo se ritorna zero, qualsiasi altro valore indica invece un codice di errore.
| |
| | |
| ; $@ : Contiene la lista dei paramentri passati allo script corrente. Ogni parametro viene opportunamente quotato e questo permette l'utilizzo di questa variabile nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile � quindi in genere consigliato rispetto a '''$*''' che ha la stessa funzione ma non quota i vari parametri.
| |
| | |
| ''Esempio:''
| |
| <pre>
| |
| FILES=$@
| |
| | |
| for file in $FILES; do
| |
| # Fare quello che si vuole con $file
| |
| echo $file
| |
| # ...
| |
| done
| |
| </pre>
| |
| | |
| ; $$ : PID del processo corrente.
| |
| | |
| ; $! : PID dell'ultimo job in background
| |
| | |
| === Manipolazione delle stringhe ===
| |
| Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come seq, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilit� con la shell <tt>'''sh'''</tt>, tuttavia imparare anche il solo sed (il pi� semplice dei tre) non � cosa immediata.
| |
| | |
| Se si usa Bash, non � necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni pi� comuni.
| |
| | |
| In Bash una stringa non � altro che una variabile. Una variabile si indica di solito con <tt>${nome}</tt> oppure con la forma abbreviata <tt>$nome</tt>. Il nome dentro le graffe pu� essere seguito da un modificatore che manipola la variabile, ad esempio:
| |
| | |
| VAR="stringa-di-esempio"
| |
| echo ${VAR#stringa-}
| |
| | |
| elimina "stringa-" dall'inizio della variabile.
| |
| | |
| I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali:
| |
| | |
| ; <tt>#</tt> : sottrae dall'inizio della stringa ''(minimale)''
| |
| ; <tt>%</tt> : sottrae dalla fine della stringa ''(minimale)''
| |
| ; <tt>/</tt> : sostituisce una sottostringa con un altra ''(solo la prima volta che viene incontrata)''
| |
| | |
| Questi operatori sono minimali, questo vuol dire che se si usano le espressioni regolari per indicare la sottostringa (da eliminare o sostituire) verr� individuata in caso di ambiguit� la sottostringa pi� piccola (o solo la prima nel caso della sostituzione).
| |
| | |
| Per ottenere gli operatori massimali basta raddoppiare il simbolo:
| |
| | |
| ; <tt>##</tt> : sottrae dall'inizio della stringa ''(massimale)''
| |
| ; <tt>%%</tt> : sottrae dalla fine della stringa ''(massimale)''
| |
| ; <tt>//</tt> : sostituisce una sottostringa con un altra ''(tutte le volte che viene incontrata)''
| |
| | |
| Gli operatori massimali cercano di individuare la sottostringa pi� grande che corrisponde all'espressione regolare (nel caso del modificatore '''//''' tutte le sottostringhe vengono sostituite). Gli operatori di questo tipo vengono comunemente chiamati anche ''greedy (ingordi)''.
| |
| | |
| Per una spiegazione dettagliata di tutti i modificatori e anche di altri modi di manipolare le stringhe in Bash (ad esempio <tt>expr</tt>) vedere:
| |
| | |
| * [http://www.tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: Manipulating Strings]
| |
| | |
| ==== Esempi: manipolazione delle stringhe ====
| |
| | |
| VAR="questa.sarebbe.una.stringa.di.esempio"
| |
|
| |
| # Risultato:
| |
|
| |
| echo ${VAR#*.} # --> sarebbe.una.stringa.di.esempio
| |
| echo ${VAR##*.} # --> esempio
| |
|
| |
| echo ${VAR%.*} # --> questa.sarebbe.una.stringa.di
| |
| echo ${VAR%%.*} # --> questa
| |
|
| |
| echo ${VAR/st/ST} # --> queSTa.sarebbe.una.stringa.di.esempio
| |
| echo ${VAR//st/ST} # --> queSTa.sarebbe.una.STringa.di.esempio
| |
| | |
| ===Alternativa a basename===
| |
| Quando in uno script ci si deve riferire al nome dello script stesso � usuale utilizzare il comando (esterno a bash) '''basename'''. Tuttavia, tramite i modificatori del paragrafo precedente, Bash stessa � in grado di fornire questa funzionalit�. Basta usare l'espressione ${0##*/}.
| |
| | |
| Esempio:
| |
| <pre>
| |
| usage () {
| |
| echo "usage: ${0##*/} "
| |
| exit 1
| |
| }
| |
| </pre>
| |
| | |
| === Cambiare l'estensione ai file ===
| |
| Rinomina tutti i file <tt>*.txt</tt> della directory corrente in <tt>*.log</tt>:
| |
| | |
| for f in *.txt; do mv "$f" "${f/%txt/log}"; done
| |
| | |
| ==Link==
| |
| Link ad altre risorse su '''GNU Bash''':
| |
| | |
| * [http://www.gnu.org/software/bash/manual/bash.html Bash Referece Manual]: manuale ufficiale
| |
| * [http://www.tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide]: la '''Bibbia''' dello bash scripting.
| |
|
| |
|
| ---- | | ---- |
| | | ; Imagination is more important than Knowledge... |
| Autore iniziale: [[Utente:TheNoise|~ The_Noise]]
| |