Tre trucchi per ottenere due comandi in uscita in un fila unica. Normalmente due output di comandi saranno sempre separati da un carriage return nel terminale Linux.

Uno dei principali ostacoli nello scripting è che i tuoi output siano formattati bene in base ai requisiti. In Linux/Unix ogni comando stdout il suo output sempre in una nuova riga. Questo è un ostacolo in molte situazioni in cui il programmatore desidera due output, due termini, due variabili in una singola riga, ad esempio il formato CSV. In questo post vedremo come presentare due o più comandi in output in una singola riga.
Leggi anche:Post relativi agli script
Normalmente quando eseguiamo più di un comando, visualizzeranno gli output in righe diverse:
# date ; hostname Sat Dec 24 01:35:50 EDT 2016 testsrv2 # echo text1; echo text2; echo text3 text1 text2 text3
Nell'esempio sopra, i comandi hanno output per riga. Realizzeremo tutti gli output in una riga usando i trucchi seguenti.
Trucco 1:
Utilizzo della funzione di traduzione. Come ho detto prima, ogni output di comando è accompagnato da un ritorno a capo. Tradurremo il ritorno a capo con il carattere di tabulazione, quindi otterremo due o più comandi in uscita in una singola riga.
# (date; hostname) |tr '\n' '\t' Sat Dec 24 01:36:22 EDT 2016 testsrv2 # (echo text1; echo text2; echo text3) |tr '\n' '\t' text1 text2 text3
Bypassando gli output per tradurre la funzione abbiamo ottenuto un output di riga singola. Qui abbiamo indicato tr
funzione per tradurre tutti i ritorni a capo (\n
) nella scheda (\t
).
Se desideri eseguire l'output in formato CSV (valore separato da virgola), sostituisci tab con una virgola e lo otterrai.
# (date; hostname) |tr '\n' ',' Sat Dec 24 01:43:09 EDT 2016,testsrv2, # (echo text1; echo text2; echo text3) |tr '\n' ',' text1,text2,text3,
Puoi osservare una virgola finale che mostra che l'output di ogni comando termina con \n e quindi viene sostituito da ,
Trucco 2:
Definindo ogni output di comando come una variabile. Qui memorizzeremo l'output di ciascun comando in una variabile e quindi faremo eco a quelle variabili in una singola riga.
# mydate=`date` # myname=`hostname` # echo $myname $mydate testsrv2 Sat Dec 24 01:46:04 EDT 2016
Qui abbiamo memorizzato l'output del comando data e hostname in mydate
e myname
variabili. Nell'ultimo comando, abbiamo fatto eco a entrambe le variabili con uno spazio intermedio. Si noti che l'output dei comandi può essere memorizzato in una variabile eseguendo il comando utilizzando i backtick (esecuzione in linea)!
Trucco 3:
Riprendendo gli output di esecuzione in linea. Esecuzione in linea, ovvero utilizzando i backtick per eseguire comandi all'interno di un altro comando. Useremo questo trucco per fare eco alle uscite in una singola riga.
# echo "`date` `hostname`" Sat Dec 24 01:50:36 EDT 2016 testsrv2
Nell'esempio sopra, in primo luogo, abbiamo eseguito comandi e ottenuto output. Ma quelle uscite vengono inserite nel comando echo. Quindi il comando echo li classifica in una singola riga.
# echo "`echo text1` `echo text2` `echo text3`" text1 text2 text3
Prendi nota del fatto che abbiamo eseguito ogni comando tra virgolette separate.