25 BASH – Le funzioni

18 Marzo, 2024 (17:56) | BASH, Linux | By: sargonsei

25 BASH – Le funzioni
Una funzione è formata da un gruppo di istruzioni racchiuse fra parentesi graffe preceduta dal nome della funzione stessa.
Ciascuna funzione deve essere dichiarata in una parte dello script che verrà letto prima della parte dello script in cui la funzione stessa verrà chiamata; la funzione verrà eseguita ogni volta che verrà chiamata.
Ogni funzione deve essere definita tramite un gruppo di istruzioni che cominciano con una riga che contiene il nome della funzione stessa, e terminano con una riga che contiene unicamente la chiusura della parentesi graffa.
Le istruzioni contenute all’interno delle parentesi graffe, verranno eseguite ogni volta che la funzione verrà chiamata. Per chiamare una funzione, occorre scrivere una riga di istruzioni contenente il nome della funzione stessa.

#!/bin/bash
: || { Funzione
 Per avviare questo script BASH chiamato [funzione.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./funzione.txt
}

Fun1 () # Questa è la prima riga con cui si dichiara la funzione Fun1
{ echo "Questo è il primo comando della funzione Fun1"
    echo "La funzione può contenere un numero qualsiasi di righe di comandi"
    echo "Questo è l'ultimo comando della funzione Fun1"; echo
} # Questa è l'ultima riga in cui si dichiara la funzione Fun1
# La dichiarazione della funzione deve precedere la sua chiamata.

Fun1 # Comando per far eseguire la funzione Fun1
Fun1 # Comando per far eseguire la funzione Fun1
exit 0

24 BASH – if, then, elif, else, fi.

17 Marzo, 2024 (22:59) | BASH, Linux | By: sargonsei

24 BASH – if, then, elif, else, fi.
24.1 BASH – if, then, fi

#!/bin/bash
: || { if, then, fi
 Per avviare questo script BASH chiamato [if.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./if.txt
}
if [[ -e prova.txt ]] # Condizione da verificare
then                  # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro contiene il file prova.txt"
fi                    # Fine istruzioni da eseguire
if [[ -e prova2.txt ]] # Condizione da verificare
then                   # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro contiene il file prova2.txt"
fi                     # Fine istruzioni da eseguire
exit 0

24.2 BASH – if, then, else, fi

#!/bin/bash
: || { if, then, else, fi
 Per avviare questo script BASH chiamato [if.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./if.txt
}
if [[ -e prova.txt ]] # Condizione da verificare
then                  # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro contiene il file prova.txt"
else                  # Se la condizione NON è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro NON contiene il file prova.txt"
fi                    # Fine istruzioni da eseguire
if [[ -e prova2.txt ]] # Condizione da verificare
then                   # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro contiene il file prova2.txt"
else                   # Se la condizione NON è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro NON contiene il file prova2.txt"
fi                     # Fine istruzioni da eseguire
exit 0

24.3 BASH – if, then, elif, else, fi.

#!/bin/bash
: || { if, then, elif, else, fi
 Per avviare questo script BASH chiamato [if.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./if.txt
}
if [[ -e prova.txt ]] # Condizione da verificare
then                  # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro contiene il file prova.txt"
elif [[ -e prova2.txt ]] # Condizione da verificare
then                     # Se la condizione è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro NON contiene il file prova.txt, ma contiene prova2.txt"
else                     # Se nessuna delle condizioni precedenti è verificata, esegui le istruzioni seguenti
    echo "La cartella di lavoro NON contiene né il file prova.txt, né il file prova2.txt"
fi                    # Fine istruzioni da eseguire
exit 0

Operatori di confronto
http://www.pluto.it/files/ildp/guide/abs/comparison-ops.html

23 BASH – Ciclo “until”

17 Marzo, 2024 (22:11) | BASH, Linux | By: sargonsei

23 BASH – Ciclo “until”

Il ciclo “until” ripete i comandi fino a che la condizione specificata continua ad essere valutata come falsa.

#!/bin/bash
: || { Ciclo Until
 Per avviare questo script BASH chiamato [cicloUntil.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./cicloUntil.txt
}
let A1=1
until [  $A1 -gt 5 ]; do # Le istruzioni del ciclo "until" verranno eseguite finché la condizione [A1 > 5] è falsa
    echo Numero $A1
    let A1=A1+1
done
exit 0

22 BASH – Ciclo “while”

17 Marzo, 2024 (21:46) | BASH, Linux | By: sargonsei

22 BASH – Ciclo “while”

Il ciclo while ripete i comandi fino a che la condizione specificata continua ad essere valutata come vera.
22.1 Ciclo “while”: un semplice esempio di funzionamento

#!/bin/bash
: || { Ciclo While
 Per avviare questo script BASH chiamato [cicloWhile.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./cicloWhile.txt
}
let A1=1
while [  $A1 -lt 6 ]; do # Le istruzioni del ciclo while verranno eseguite finché [A1 < 6]
    echo Numero $A1
    let A1=A1+1
done
exit 0

21 BASH – Ciclo “for”

17 Marzo, 2024 (20:41) | BASH, Linux | By: sargonsei

21 BASH – Ciclo “for”
21.1 Ciclo “for” – semplice esempio di funzionamento

#!/bin/bash
: || { Inizio commento multilinea
 Ciclo for
 Per avviare questo script BASH chiamato [cicloFor.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./cicloFor.txt
}
for A1 in 1 2 3 4 5
do
  echo "Numero $A1"
done
exit 0
Esempio di output
:~/Pubblici> ./cicloFor.txt
Numero 1
Numero 2
Numero 3
Numero 4
Numero 5
:~/Pubblici> 

21.2 Ciclo “for” per eseguire comandi

#!/bin/bash
# Ciclo for
# Per avviare questo script BASH chiamato [cicloFor.txt]
# aprire un terminale nella cartella in cui si trova questo script
# ed impartire il comando
# ./cicloFor.txt
for A2 in Documenti Immagini Modelli; do
  A21='ls ~/'$A2
  echo "Output del comando "$A21; eval "$A21"
done
exit 0
Esempio di output
:~/Pubblici> ./cicloFor.txt
Output del comando ls ~/Documenti
aOutCalsa.mp3  aOutCpulse.mp3  aOutD-pa.mp3  aOutD_pa.mp3  Cardio.bak  Cardio.old  Cardio.txt  Esperimento01  vOutB.mkv  vOUTc-pa.mkv  xxx.txt
Output del comando ls ~/Immagini
01hardware.txt  03video.txt  05usb.txt  07internet.txt    09ramSwap.txt  11smontare.txt  13fstab.txt   CD-DVD.txt
02pci.txt       04audio.txt  06cpu.txt  07r_internet.txt  10hd.txt       12F_NTFS.txt    17F_ext2.txt
Output del comando ls ~/Modelli
:~/Pubblici>

20 BASH – Manipolazione files di testo

4 Marzo, 2024 (15:50) | Senza categoria | By: sargonsei

20 BASH – Manipolazione files di testo

20.1 Script BASH – Scrivere l’output in un file di testo
L’output di un comando BASH è di due tipi: Output standard (canale 1) che contiene esclusivamente l’effetto del comando, ed Errore standard (canale 2) che contiene esclusivamente messaggi di errore ed avvisi vari che accompagnano l’esecuzione del comando stesso. Di default, l’output del canale 1 può essere reindirizzato verso un file di testo frapponendo l’operatore [>] (senza parentesi quadre) fra il comando BASH ed il nome del file di testo che si desidera che contenga l’output del comando stesso; l’output del canale 2 (Error standard) viene indirizzato sul terminale a prescindere di dove sia stato reindirizzato l’output del canale 1 (Output standard). Per far confluire in un file di testo avvisi e messaggi di errore che, di default, verrebbero visualizzati sul canale 2, non basta reindirizzare l’output del canale 1 verso un file di testo, ma occorre altresì indirizzare l’output del canale 2 verso il canale 1; questo effetto si ottiene ponendo l’operatore [2>&1] (senza parentesi quadre) in coda al comando suddetto.
#!/bin/bash
# Per eseguire lo script digitare ./ seguito dal nome dello script, Poi digitare [invio]
echo "Prima riga" > testo.txt # Crea il file di testo 'testo.txt' contenente "Prima riga".
# ^ Se 'testo.txt' esiste già, verrà sovrascritto. ^
echo "Riga seguente" >> testo.txt # Aggiunge la riga "Riga seguente" in coda al file di testo 'testo.txt'.
# ^ Se 'testo.txt' non esiste, verrà creato. ^

19 BASH – Variabili e calcoli

4 Marzo, 2024 (15:49) | BASH, Linux | By: sargonsei

19 BASH – Variabili e calcoli

Le variabili BASH non sono tipizzate, nè all’interno di una shell, nè all’interno di uno script. Come conseguenza di ciò, se non diversamente specificato in ogni singola istruzione, vengono trattate come variabili stringa e, anche se nell’istruzione è specificato che una variabile deve contenere il risultato di un’operazione matematica, essa può contenere solo numeri interi, troncando tutti i decimali. Per specificare che il contenuto numerico di una variabile deve essere trattato come una cifra, occorre far precedere la variabile dal comando let seguito da uno spazio. Seguono alcuni esempi.
A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 1239/10
let A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 123
A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 1239/10 BB39/10
let A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 123 BB3

AA=10 BB=20 CC=30; DD=$AA$BB$CC; echo $DD # Visualizza 102030
AA=10 BB=20 CC=30; let DD=$AA$BB$CC; echo $DD # Visualizza 102030
AA=10 BB=20 CC=30; DD=$AA+$BB+$CC; echo $DD # Visualizza 10+20+30
AA=10 BB=20 CC=30; let DD=$AA+$BB+$CC; echo $DD # Visualizza 60
AA=10 BB=20 CC=30; DD=$(($AA+$BB+$CC)); echo $DD # Visualizza 60
let AA=3+3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 6
let AA=3-3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 0
let AA=3*3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 9
let AA=3/3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 1
AA=3; echo $(($AA*4-30/$AA+5)) # Visualizza il risultato dell'espressione ($AA*4-30/$AA+5) che, in questo, caso è 7

18 BASH – Variabili e stringhe

4 Marzo, 2024 (15:49) | BASH, Linux | By: sargonsei

18 BASH – Variabili e stringhe

18.1 Variabili contenenti un comando
Una variabile può contenere anche un comando, che può essere eseguito o mostrato. Per esempio:

cd ~; AA='ls'; cd ..; $AA # Mette la strimga 'ls' nella variabile AA; esegue il comando contenuto nella variabile AA
opensuse
cd ~; AA='ls'; cd ..; echo $AA # Mette la strimga 'ls' nella variabile AA;  visualizza il contenuto della variabile AA
ls
:~>

18.2 Variabili contenenti l’output di un comando
Una variabile può contenere anche l’output di comando, per mostrarlo in un secondo tempo. Per esempio:

cd ~; AA=`ls`; cd ..; echo $AA # Mette l'output del comando `ls` nella variabile AA; visualizza il contenuto della variabile AA
bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video
cd ~; AA=$(ls); echo $AA # Mette l’output del comando 'ls' nella variabile AA; visualizza il contenuto della variabile AA
bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video
:~>
Si noti che ['] non è [`] e che [-] non è [~]; infatti, in Linux:
['] si ottiene digitando il tasto ['] (apostrofo);
[`] si ottiene digitando la combinazione di tasti [AltGr]+['] (apostrofo);
[-] si ottiene digitando il tasto [-] (segno meno);
[~] si ottiene digitando la combinazione di tasti [AltGr]+[ì] (i accentata).

18.3 – Manipolazione delle stringhe

VAR1=`mediainfo videoIN.mp4 | egrep Wi` # Mette all'interno della variabile VAR1 l'output di un comando
VAR2=`expr index "$VAR1" :` # Mette in VAR2 il numero corrispondente alla posizione del carattere ":" all'interno di VAR1
VAR3=${#VAR1} # Mette in VAR3 il numero di caratteri contenuto in VAR1
VAR4=${VAR1:2} # Mette in VAR4 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR5=${VAR1:2:3} # Mette in VAR5 3 caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR6=${VAR1:(-6)} # Mette in VAR6 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR7=${VAR1:(-6):4} # Mette in VAR7 4 caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR8=${VAR1::2} # Mette in VAR8 tutti i caratteri consecutivi contenuti in VAR1 che precedono il 2° contando dall'inizio
VAR9=${VAR1::(-6)} # Mette in VAR9 tutti i caratteri consecutivi contenuti in VAR1 che seguono il 6° contando dalla fine
VAR10=${VAR1/" "/""} # Mette in VAR10 il contenuto di VAR1 priva del primo spazio vuoto
VAR11=${VAR1//" "/""} # Mette in VAR11 il contenuto di VAR1 priva di tutti gli spazi vuoti
VAR12=${VAR1/i/yY} # Mette in VAR12 il contenuto di VAR1 sostituendo il primo carattere "i" con "yY"
VAR13=${VAR1//i/yY} # Mette in VAR13 il contenuto di VAR1 sostituendo tutti i caratteri "i" con "yY"

17 BASH – Operatori/separatori

4 Marzo, 2024 (15:48) | BASH, Linux | By: sargonsei

17 BASH – Operatori/separatori

17.1) Rendere uno script BASH agevolmente riconoscibile come tale.
Affinché uno script BASH sia agevolmente riconoscibile come tale sia dagli utenti, sia dal compilatore BASH sia dal Sistema operativo, e non venga erroneamente riconosciuto per uno script scritto in un altro linguaggio, è opportuno che la prima riga dello script stesso contenga l’istruzione
#!/bin/bash Questa è l’unica istruzione che, sebbene inizi con [#] (cancelletto), viene interpretata come un’istruzione, e non come un commento.

17.2) Creare uno script, consiste nello scrivere le singole istruzioni una dopo l’altra separate dall’operatore/separatore che si ritiene più opportuno usare, tenendo conto del risultato che l’operatore/separatore ha sul risultato finale; gli operatori che possono essere scritti fra un comando e l’altro (senza paresi quadre) sono: [;] (puntoevirgola), [&] (and), [&&] (doppio and), [#] (cancelletto), [|] (pipe) e [||] (doppia pipe); di questi, gli operatori possibili a fine riga sono: [;] (puntoevirgola) ed [&] (and). Ogni singola istruzione deve essere separata dalle altre, cosa fattibile sia inserendo un operatore/separatore, sia andando a capo; per questo motivo, alcune guide descrivono l’andare a capo come l’inserimento di un operatore/separatore chiamato [newline] avente la medesima funzione dell’operatore [;] (puntoevirgola) e fisicamente riconoscibile per il fatto che lo script prosegue sotto con una ulteriore istruzione.

17.3.1) L’operatore [;] (puntoevirgola) si usa per separare due istruzioni da eseguire una dopo l’altra a prescindere dall’esito delle stesse; per esempio: per eseguire la riga
mkdir prova; cd provaBASH: crea la cartella “prova” nella cartella di lavoro solo se l’utente può scrivere nella cartella in cui il terminale è aperto e solo se la cartella “prova” non esiste; successivamente, solo se la cartella prova esiste, accede alla cartella prova.
Si noti che il comando scritto dopo il puntoevirgola, sebbene impartito, viene eseguito solo dopo che il comando precedente è terminato ed a prescindere dall’esito del comando stesso, quindi se la cartella di lavoro contiene già una cartella prova, il comando [mkdir prova] non viene eseguito, ma il comando [cd prova] verrà eseguito.
Altro comportamento da notare: nella riga
sleep 3; echo "Questo messaggio viene visualizzato dopo 3 secondi" l’operatore [;] farà sì che il comando che SEGUE l’operatore venga eseguito dopo aver terminato il comando che PRECEDE l’operatore; siccome (in questo caso) il comando che PRECEDE l’operatore genera una pausa di 3 secondi, il comando che SEGUE l’operatore viene eseguito dopo 3 secondi.

17.3.2) L’operatore [&] (and) è utile per avviare da terminale due o più applicazioni che devono essere disponibili contemporaneamente, in quanto permette di avviarle in background, quindi l’istruzione successiva verrà eseguita prima che l’istruzione precedente sia terminata; per esempio: la riga
sleep 3& echo "Questo messaggio viene visualizzato senza aspettare 3 secondi" l’operatore [&] farà sì che il comando che PRECEDE l’operatore venga eseguito in background, quindi il comando che SEGUE l’operatore viene eseguito senza aspettare che il comando che il comando che precede l’operatore sia terminato.

17.3.3) L’operatore [&&] (doppio and) è utile per impartire due o più istruzioni una dopo l’altra, ma le istruzioni scritte dopo l’operatore [&&] vengono eseguite solo se l’istruzione scritta prima dell’operatore [&&] è stata eseguita correttamente; per esempio: la riga
mkdir prova && cd prova fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, e poi, solo se ha eseguito l’istruzione precedente, accede alla cartella prova; se, per un qualsiasi motivo (es. la cartella di lavoro contiene già una cartella che si chiama prova) l’istruzione scritta prima dell’operatore [&&] non viene eseguita, non verrà eseguita nemmeno l’istruzione scritta dopo l’operatore [&&].

17.3.4) L’operatore [#] (cancelletto) segnala a BASH che i comandi sono terminati, e quello che è scritto fra il primo operatore [#] e il termine della riga è un commento da non eseguire. Notare che: dopo l’operatore [#], si potrà scrivere qualsiasi cosa, compresi altri operatori o altri comandi, ma nessun comando verrà eseguito, e l’unico operatore che ha effetto è [newline] (andare a capo).

17.3.5) L’operatore [|] (pipe) fa sì che l’output del comando che precede sia utilizzato come input del comando che segue.

17.3.6) L’operatore [||] (doppia pipe) si comporta come l’operatore booleano OR, nel senso che viene eseguito solo se il comando precedente non viene eseguito; per esempio la riga:
mkdir prova || cd prova fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, ma vi accede solo nel caso in cui la cartella prova esiste già.

17.3.7) L’operatore [newline] (andare a capo) non è un operatore vero e proprio, semplicemente segnala a BASH che la riga è finita, quindi BASH deve eseguirla e passare all’istruzione riportata nella riga successiva.

17.3.8) In una riga, si possono usare più operatori e/o più volte il medesimo operatore, anche raggruppando le istruzioni fra parentesi tonda o graffa. Se si raggruppano le istruzioni fra parentesi tonde, ogni parentesi aperta deve essere chiusa nella stessa riga, mentre le parenti graffe possono essere chiuse in righe successive, ma solo negli script.

17.3.9) Commenti su varie righe consecutive
Qualora sia necessario commentare più linee, la riga che precede i commenti deve contenere unicamente [: ‘] (senza parentesi quadre) e la riga che segue i commenti deve contenere unicamente [‘] (senza parentesi quadre)

#!/bin/bash
# Per eseguire lo script digitare ./ seguito dal nome dello script, Poi digitare [invio]
echo prima
: 'duepunti + spazio + apice + commento + apice'
echo durante
: '
questo è un
commento
multilinea
'
echo dopo

oppure
#!/bin/bash
echo prima
: "duepunti + spazio + doppioapice + commento + doppioapice"
echo durante
: '
questo è un
commento
multilinea
'
echo dopo

oppure
#!/bin/bash
echo prima
: || {duepunti + spazio + || + spazio + apreGraffa + commento + chiudeGraffa}
echo durante
: || {
questo è un
commento
multilinea
}
echo dopo

16 BASH – Operazioni su files e cartelle

4 Marzo, 2024 (15:47) | BASH, Linux | By: sargonsei

16 BASH – Operazioni su files e cartelle
16.1 Output visualizzato come di default

ls                    # Elenca files e cartelle contenuti nella cartella di lavoro
ls ~                  # Elenca files e cartelle contenuti nella /home dell'utente
ls /percorso/completo # Elenca files e cartelle contenuti nella cartella "/percorso/completo"
dir                    # Elenca files e cartelle contenuti nella cartella di lavoro 
dir ~                  # Elenca files e cartelle contenuti nella /home dell'utente 
dir /percorso/completo # Elenca files e cartelle contenuti nella cartella "/percorso/completo"
cd /                  # La cartella principale diventa la cartella di lavoro
cd ~                  # La /home dell'utente diventa la cartella di lavoro
cd ..                 # La cartella in cui è contenuta la cartella di lavoro diventa la cartella di lavoro
cd /percorso/completo # La cartella "/percorso/completo" diventa la cartella di lavoro
cp file1 file2        # Crea il file file2 identico a file1
cp file1 file2 dir    # Copia file1 e file2 all'interno della cartella dir
mv file1 file2        # Rinomina file2 il documento file1
rm file1 file2        # Rimuove file1 e file2
rm dir1 dir2          # Rimuove le cartelle dir1 e dir2
rm -r dir1 dir2       # Rimuove ricorsivamente le cartelle dir1 e dir2 ed il loro contenuto
mkdir dir1 dir2       # Crea le cartelle dir1 e dir2
pwd                   # Visualizza il percorso assoluto della cartella di lavoro corrente

Note:
Il carattere grafico “~” (tilde) si ottiene digitando la combinazione di tasti [AltGr]+[ì].
Il tasto [AltGr] si trova a destra della barra spaziatrice; il tasto [ì] (i accentata) si trova a destra dell’apostrofo.

16.2 Omissione di parte dell’output
L’output della shell BASH viaggia su 2 canali:
Canale 1: Output Standard (visualizza l’output del comando stesso)
Canale 2: Output Error (visualizza l’output di eventuali messaggi di errore del comando stesso).
Di default, l’output di entrambi i canali viene mostrato sulla shell BASH ma, dirottando l’output di un canale verso [/dev/nul], è possibile visualizzare l’output di un solo canale.
Seguono alcuni esempi.

:~> ls Pubblici # Visualizza il contenuto della cartella [Pubblici] oppure visualizza un errore
testo.txt
:~> ls pubblici # Visualizza il contenuto della cartella [pubblici] oppure visualizza un errore
ls: impossibile accedere a 'pubblici': File o directory non esistente
:~> ls Pubblici 1> /dev/null # NON esegue alcun comando. Se il comando NON può essere eseguito, visualizza un errore
:~> ls pubblici 1> /dev/null # NON esegue alcun comando. Se il comando NON può essere eseguito, visualizza un errore
ls: impossibile accedere a 'pubblici': File o directory non esistente
:~> ls Pubblici 2> /dev/null # Visualizza il contenuto della cartella [Pubblici]. Se il comando NON può essere eseguito, NON visualizza un errore
testo.txt
:~> ls pubblici 2> /dev/null # Visualizza il contenuto della cartella [Pubblici]. Se il comando NON può essere eseguito, NON visualizza un errore
:~>

16.3 Reindirizzamento dell’output verso un file di testo
Di default, l’output della shell BASH viene visualizzato sulla shell BASH, ma è possibile dirottare l’output di un canale verso un file di testo.
Se non si specifica quale sia il canale il cui output deve essere dirottato verso il file di testo, di default viene dirottato solo l’output del canale 1 (Standard Output).
Per esempio: volendo creare, nella cartella di lavoro, un file di testo chiamato [elenco.txt] contenente l’output del comando [ls Pubblici], occorre impartire il comando:
ls Pubblici > elenco.txt # Crea il file [elenco.txt] contenente l'output del comando [ls Pubblici]
ls Pubblici >> elenco.txt # Aggiunge al file [elenco.txt] l'output del comando [ls Pubblici]

In entrambi i casi, solo l’output del canale 1 (Standard Output) verrà inserito nel file di testo; eventuali messaggi di errore verranno visualizzati all’interno della shell BASH.

Volendo creare il file [elencoC1.txt] contenente l’output del comando [ls Pubblici] ed il file [elencoC2.txt] contenente eventuali messaggi di errore conseguenti l’esecuzione del comando [ls Pubblici], impartire il comando
ls Pubblici > elencoC1.txt 2> elencoC2.txt
Volendo aggiungere al file [elencoC1.txt] l’output del comando [ls Pubblici] ed al file [elencoC2.txt] eventuali messaggi di errore conseguenti l’esecuzione del comando [ls Pubblici], impartire il comando
ls Pubblici >> elencoC1.txt 2>> elencoC2.txt
Si precisa che: avendo dirottato verso files di testo sia lo Standard Output, sia l’Error Output, la shell BASH mostrerà unicamente il comando impartito ed il prompt; per vedere l’output del comando, ed eventuali messaggi di errore, sarà necessario visualizzare il contenuto dei files corrispondenti.