Tři triky, jak získat výstup dvou příkazů v jeden řádek. Normálně budou dva výstupy příkazů vždy odděleny carriage returnem v linuxovém terminálu.
Jednou z hlavních překážek ve skriptování je dobře naformátovat výstupy podle požadavků. V Linuxu/Unixu každý příkaz stdout svůj výstup vždy na novém řádku. To je překážka v mnoha situacích, kdy kodér chce dva výstupy, dva termíny, dvě proměnné v jednom řádku, například ve formátu CSV. V tomto příspěvku uvidíme, jak prezentovat výstup dvou nebo více příkazů v jednom řádku.
Přečtěte si také:Skriptování souvisejících příspěvků
Normálně, když provádíme více než jeden příkaz, zobrazí výstupy v různých řádcích:
# date ; hostname Sat Dec 24 01:35:50 EDT 2016 testsrv2 # echo text1; echo text2; echo text3 text1 text2 text3
Ve výše uvedeném příkladu mají příkazy výstupy na řádek. Pomocí níže uvedených triků provedeme všechny výstupy v jedné řadě.
Trik 1:
Použití funkce překladu. Jak jsem řekl dříve, každý výstup příkazu je doprovázen návratem vozíku. Budeme překládat návrat vozíku se znakem tabulátoru, čímž získáme výstup dvou nebo více příkazů v jednom řádku.
# (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
Vynecháním výstupů pro funkci překladu jsme dosáhli jednořádkového výstupu. Zde jsme dali pokyn tr
funkce pro překlad všech návratů vozíku (\n
) na kartu (\t
).
Pokud chcete výstup ve formátu CSV (hodnota oddělená čárkami), nahraďte tabulátor čárkou a získáte ji.
# (date; hostname) |tr '\n' ',' Sat Dec 24 01:43:09 EDT 2016,testsrv2, # (echo text1; echo text2; echo text3) |tr '\n' ',' text1,text2,text3,
Můžete pozorovat jednu koncovou čárku, která ukazuje, že každý výstup příkazu končí \n, a proto je nahrazen ,
Trik 2:
Definováním každého výstupu příkazu jako proměnné. Zde uložíme výstup každého příkazu do jedné proměnné a poté tyto proměnné zopakujeme na jednom řádku.
# mydate=`date` # myname=`hostname` # echo $myname $mydate testsrv2 Sat Dec 24 01:46:04 EDT 2016
Zde jsme uložili datum a výstup příkazu hostname do mydate
a myname
proměnné. V posledním příkazu jsme zopakovali obě proměnné s mezerou mezi nimi. Všimněte si, že výstup příkazů lze uložit do proměnné provedením příkazu pomocí backticks (in-line provádění)!
Trik 3:
Ozvěnou in-line výstupů provedení. In-line provádění, tj. použití zpětných značek k provádění příkazů v rámci jiného příkazu. Tento trik použijeme k echo výstupů v jednom řádku.
# echo "`date` `hostname`" Sat Dec 24 01:50:36 EDT 2016 testsrv2
Ve výše uvedeném příkladu jsme nejprve provedli příkazy a získali výstupy. Ale tyto výstupy jsou přiváděny do příkazu echo. Proto je příkaz echo stdout v jednom řádku.
# echo "`echo text1` `echo text2` `echo text3`" text1 text2 text3
Poznamenejte si, že jsme každý příkaz provedli v samostatných zadních uvozovkách.