3 581
contributi
S3v (discussione | contributi) |
(verifica e piccole aggiunte) |
||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | {{Versioni compatibili}} | ||
==Intro== | ==Intro== | ||
'''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. | '''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.<br> | ||
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à. | |||
Si noti che per gli script di sistema è consigliabile limitarsi alle sole istruzioni della shell '''sh''' secondo lo standard ''POSIX'', supportate per esempio da <code>'''dash'''</code>, più leggera ma anche meno potente e poco indicata come shell interattiva. | |||
Riga 169: | Riga 170: | ||
1 | 1 | ||
; <code>$@</code> : contiene la lista dei parametri passati allo script corrente. Ogni parametro viene opportunamente quotato, questo permette l'utilizzo | ; <code>$@</code> : contiene la lista dei parametri passati allo script corrente. Ogni parametro viene opportunamente quotato, se questa variabile è quotata, e questo ne permette l'utilizzo 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 <code>'''$*'''</code> che ha la stessa funzione ma, se quotata, non quota i vari parametri ma l'intera stringa; | ||
''Esempio:'' | ''Esempio:'' | ||
<pre> | <pre> | ||
for file in "$@"; do | |||
for file in $ | |||
# Fare quello che si vuole con $file | # Fare quello che si vuole con $file | ||
echo $file | echo "$file" | ||
# ... | # ... | ||
done | done | ||
Riga 187: | Riga 186: | ||
=== Manipolazione delle stringhe === | === Manipolazione delle stringhe === | ||
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code>, tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata. | Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code> (''POSIX''), 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. | 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. | ||
Riga 236: | Riga 235: | ||
; <code>&&</code> : operatore logico AND, il secondo comando verrà eseguito solo se il primo avrà esito positivo | ; <code>&&</code> : operatore logico AND, il secondo comando verrà eseguito solo se il primo avrà esito positivo | ||
; <code>;</code> : separatore di comandi, il secondo comando verrà eseguito in ogni caso | ; <code>;</code> : separatore di comandi, il secondo comando verrà eseguito in ogni caso (in uno script è equivalente a un "a capo" e questa è la concatenazione di default) | ||
$ cd ... && echo done | $ cd ... && echo done | ||
Riga 326: | Riga 325: | ||
# seleziona, apri file, incolla, salva: noioso | # seleziona, apri file, incolla, salva: noioso | ||
# quota il tutto e appendi ad un file con echo: già meglio | # quota il tutto e appendi ad un file con echo: già meglio | ||
# <code>'''CTRL-x'''</code> <code>'''CTRL-e'''</code>, si apre il nostro editor di fiducia e salviamo: superbo | # <code>'''CTRL-x'''</code> <code>'''CTRL-e'''</code>, si apre il nostro editor di fiducia e salviamo: superbo (se si utilizza la modalità ''vi'' è sufficiente premere il tasto v in modalità comando) | ||
===Processo in background=== | ===Processo in background=== | ||
Riga 376: | Riga 375: | ||
$ bind -x '"\C-x\C-r":ls ~' | $ bind -x '"\C-x\C-r":ls ~' | ||
ora con la sequenza <code>'''CTRL-x'''</code> <code>'''CTRL-r'''</code> verrà eseguito il nostro comando. | ora con la sequenza <code>'''CTRL-x'''</code> <code>'''CTRL-r'''</code> verrà eseguito il nostro comando. È possibile anche definire scorciatoie da tastiera a funzioni già supportate da bash ma non ancora assegnate (si veda <code>bind -P</code> per un elenco), e la sintassi è la stessa ma senza l'opzione -x. | ||
Per cancellarla: | Per cancellarla: | ||
$ bind -r "\C-x\C-r" | $ bind -r "\C-x\C-r" | ||
Funziona solo nella shell in cui si crea, a meno che non si inserisca nel file <code>~/.inputrc</code>. | Funziona solo nella shell in cui si crea, a meno che non si inserisca nel file <code>~/.inputrc</code>. Per i dettagli consultare <code>man readline</code>. | ||
===Aiuto veloce=== | |||
La pagina di manuale di bash (si veda <code>man bash</code>) è certamente utilissima ed esaustiva, ma non sempre adatta a un aiuto veloce per rinfrescarsi solo la sintassi di qualche comando. Fortunatamente '''bash''' dispone anche di uno strumento di aiuto integrato tramite la funzione <code>help</code>. | |||
Per la lista di tutti i comandi interni della shell: | |||
$ help | |||
Per informazioni su un comando interno (''shell builtin''), per esempio bind: | |||
$ help bind | |||
Un altro comando utile, per sapere che cosa verrà eseguito con un dato comando (una funzione, un comando interno oppure un eseguibile esterno): | |||
$ type comando-da-cercare | |||
==Link== | ==Link== | ||
Riga 394: | Riga 405: | ||
|Verificata_da= | |Verificata_da= | ||
:[[Utente:S3v|S3v]] | :[[Utente:S3v|S3v]] | ||
:[[Utente:HAL 9000|HAL 9000]] 21:54, 22 giu 2014 (CEST) | |||
|Estesa_da= | |Estesa_da= | ||
:[[Utente:S3v|S3v]] | :[[Utente:S3v|S3v]] | ||
|Numero_revisori= | |Numero_revisori=2 | ||
}} | }} | ||
[[Categoria:Bash]] | [[Categoria:Bash]] |
contributi