Bash tips: differenze tra le versioni

aggiunto debug integrato
(aggiunto debug integrato)
Riga 317: Riga 317:
Rinomina tutti i file <code>*.txt</code> della directory corrente in <code>*.log</code>:
Rinomina tutti i file <code>*.txt</code> della directory corrente in <code>*.log</code>:


  $ for f in *.txt; do mv "$f" "${f/%txt/log}"; done
  $ for f in *.txt; do mv -- "$f" "${f/%txt/log}"; done


L'opzione "--" dopo il comando esterno <code>mv</code> serve per comunicargli che le stringhe che seguono non sono opzioni, nemmeno se iniziassero con il carattere "-". È sempre buona norma utilizzarla con comandi che manipolano i file, quali <code>rm</code>, <code>cp</code>, <code>mv</code>, ecc...
=== Debug integrato ===
'''Bash''', proprio come '''dash''', ha delle opzioni che ne consentono il debug.
Per iniziare invocando uno script con <code>-n</code> è possibile effettuare un primitivo controllo di sintassi. Si noti che possibili comandi inesistenti non vengono controllati e nemmeno le espansioni (di variabili, percorsi, ecc...), ma può essere utile per verificare che tutti i blocchi sono stati chiusi correttamente prima di eseguire lo script:
$ bash -n script.sh
Dopo questo primo controllo ci sono altre opzioni utili, che possono essere impiegate anche congiuntamente nell'esecuzione dello script:
* <code>-x</code> invia sull'output per gli errori ogni comando prima di eseguirlo, preceduto da un prompt "+ ";
* <code>-v</code> invia sull'output per gli errori l'intero blocco di codice che è stato letto (solo la prima volta);
* <code>-u</code> interrompe l'esecuzione dello script se si accede a una variabile che non è mai stata assegnata, può essere utile in caso di errori di battitura;
* <code>-e</code> interrompe lo script in caso un comando ritorni un errore, se il suo valore di ritorno non è controllato da un <code>if</code>, <code>while</code>, <code>until</code> o dalla concatenazione di comandi con <code>||</code>.
Le opzioni possono essere anche accorpate:
$ bash -evx script.sh
L'opzione <code>-e</code> può essere utilizzata anche fuori dal debug, ma è consigliabile non fare affidamento sulla sua presenza nella prima riga dello script (<code>#! /bin/bash -e</code>), visto che può essere ignorata semplicemente invocando la shell con lo script come argomento oppure importando il contenuto dello script. I valori di ritorno di ogni comando che può fallire vanno invece controllati nel codice.


==Il file .bashrc==
==Il file .bashrc==
Riga 429: Riga 447:
|Verificata_da=
|Verificata_da=
:[[Utente:S3v|S3v]]
:[[Utente:S3v|S3v]]
:[[Utente:HAL 9000|HAL 9000]] 21:54, 22 giu 2014 (CEST)
:[[Utente:HAL 9000|HAL 9000]] 14:34, 25 giu 2014 (CEST)
|Estesa_da=
|Estesa_da=
:[[Utente:S3v|S3v]]
:[[Utente:S3v|S3v]]
:[[Utente:HAL 9000|HAL 9000]]
|Numero_revisori=2
|Numero_revisori=2
}}
}}


[[Categoria:Bash]]
[[Categoria:Bash]]
3 581

contributi