Combinare insieme più comandi.
- Dettagli
- Categoria principale: Code Snippets
- Categoria: Bash
- Pubblicato 25 Febbraio 2012
- Visite: 341
A volte può capitare di dover eseguire una sequenza di comandi e potrebbe succedere che prima di poter eseguire un particole comando, dobbiamo attendere la fine dell'esecuzione di un comando lanciato in precedenza. Per evitare di restare incantati davanti alla shell si può utilizzare il punto e virgola (;) come separatore dei vari comandi che devono essere lanciati, in questo modo tutti i comandi verranno lanciati nella sequenza in cui sono stati digitati. Va precisato che l'esito dell'esecuzione di un comando facente parte della sequenza, non andrà a inficiare l'esecuzione dei successivi.
Viene quindi da chiedersi: se volessi invece eseguire un comando di una sequenza solo se il precedente ha concluso con successo la sua esecuzione? Bene, basta sostituire al punto e virgola due e commerciali (&&), in questo modo l'esecuzione del comando successivo sarà subordinata all'esito positivo del precedente.
Ovviamente se c'è la possibilità di eseguire un comando solo se il precedente ha terminato con successo la sua esecuzione, c'è anche la possibilità di eseguire un comando solo se il precedente ha fallito la sua esecuzione. Per fare questo basta sostituire i caratteri (&&) con (||).
Le possibilità di combinare i comandi non sono certo finite qui, infatti è possibile inserire l'output di un comando dentro un altro. Per fare questa operazione basta racchiudere il comando con $().
Un esempio potrebbe essere questo:
mkdir $(date "+%Y-%m-%d")
L'output del comando date verrà passato al comando mkdir che a sua volta creerà una directory che per nome avrà la data fornita da mkdir.
Un' altra operazione molto utile e quella di usare l'output di un comando come input di un altro, per fare questa operazione si usa il simbolo pipe (|).
Un esempio molto pratico è ad esempio quando si desidera vedere l'elenco dei file presenti in una directory, nel caso fossero molti file difficilmente si riuscirebbe a leggerli tutti perché lo scorrimento veloce ci impedirebbe di vederli con comodo. Pertanto in questo caso è utile affiancare al comando ls il comando less che visualizza le informazioni una pagina alla volta.
ls | less
oppure un altro esempio potrebbe essere:
ps -ux | less
Potrebbe anche servire avere il risultato di un comando direttamente su un file, in questo caso basta semplicemente accodare al comando il simbolo maggiore (>) con di fianco il nome del file su cui andare a scrivere. Ecco un esempio:
ls > elenco_file.txt
Va precisato che questo comando scrive certamente un file ma se ne frega se il file esiste o non esiste perché ne creerà sempre uno nuovo.
Se questo atteggiamento potrebbe a volte darci fastidio, ossia volessimo che l'output di un comando non andasse a sovrascrivere il contenuto di un file esistente basta raddoppiare il segno di maggiore (>>)
Esempio:
ls >> elenco_file.txt
Infine è anche possibile passare il contenuto di un file come input di un comando utilizzando il segno di minore (<). Un esempio banalissimo potrebbe essere:
echo < info.txt




