Trois astuces pour obtenir la sortie de deux commandes dans un seule rangée. Normalement, deux sorties de commandes seront toujours séparées par un retour chariot dans le terminal Linux.
L'un des principaux obstacles à la création de scripts est de bien formater vos sorties en fonction des exigences. Sous Linux/Unix, chaque commande stdout sa sortie toujours dans une nouvelle ligne. C'est un obstacle dans de nombreuses situations où le codeur veut deux sorties, deux termes, deux variables dans une seule ligne, par exemple au format CSV. Dans cet article, nous verrons comment présenter la sortie de deux commandes ou plus sur une seule ligne.
A lire aussi :Articles liés aux scripts
Normalement, lorsque nous exécutons plus d'une commande, elles affichent les sorties dans différentes lignes :
# date ; hostname Sat Dec 24 01:35:50 EDT 2016 testsrv2 # echo text1; echo text2; echo text3 text1 text2 text3
Dans l'exemple ci-dessus, les commandes ont des sorties par ligne. Nous allons accomplir toutes les sorties sur une seule ligne en utilisant les astuces ci-dessous.
Astuce 1 :
Utiliser la fonction de traduction. Comme je l'ai dit plus tôt, chaque sortie de commande est accompagnée d'un retour chariot. Nous allons traduire le retour chariot avec un caractère de tabulation, obtenant ainsi deux sorties de commandes ou plus sur une seule ligne.
# (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
En contournant les sorties pour traduire la fonction, nous avons obtenu une sortie à une seule ligne. Ici, nous avons instruit tr
fonction pour traduire tous les retours chariot (\n
) à tabulation (\t
).
Si vous voulez sortir au format CSV (valeurs séparées par des virgules), remplacez tabulation par une virgule et vous l'obtiendrez.
# (date; hostname) |tr '\n' ',' Sat Dec 24 01:43:09 EDT 2016,testsrv2, # (echo text1; echo text2; echo text3) |tr '\n' ',' text1,text2,text3,
Vous pouvez observer une virgule finale qui montre que chaque sortie de commande se termine par \n et donc elle est remplacée par ,
Astuce 2 :
En définissant chaque sortie de commande comme une variable. Ici, nous allons stocker la sortie de chaque commande dans une variable, puis nous ferons écho à ces variables dans une seule ligne.
# mydate=`date` # myname=`hostname` # echo $myname $mydate testsrv2 Sat Dec 24 01:46:04 EDT 2016
Ici, nous avons stocké la sortie de la commande date et hostname dans mydate
et myname
variables. Dans la dernière commande, nous avons fait écho aux deux variables avec un espace entre elles. Notez que la sortie des commandes peut être stockée dans une variable en exécutant la commande à l'aide de backticks (exécution en ligne) !
Astuce 3 :
En faisant écho aux sorties d'exécution en ligne. Exécution en ligne, c'est-à-dire en utilisant des backticks pour exécuter des commandes dans une autre commande. Nous utiliserons cette astuce pour faire écho aux sorties sur une seule ligne.
# echo "`date` `hostname`" Sat Dec 24 01:50:36 EDT 2016 testsrv2
Dans l'exemple ci-dessus, nous avons d'abord exécuté des commandes et obtenu des sorties. Mais ces sorties sont introduites dans la commande echo. Par conséquent, la commande echo les place sur une seule ligne.
# echo "`echo text1` `echo text2` `echo text3`" text1 text2 text3
Notez que nous avons exécuté chaque commande entre guillemets séparés.