GNU/Linux >> Znalost Linux >  >> Linux

Předpona každého výstupu příkazu za běhu

Předpokládám, že to, co děláte ve svém allcommands.sh, je:

command1.sh
command2.sh

Stačí jej nahradit pomocí

command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"

Minimální příklad allcommands.sh :

#!/bin/bash
for i in command{1,2}.sh; do
    ./"$i" | sed 's/^/['"${i%.sh}"'] /'
done

S command1.sh a command2.sh spustitelný a ve stejném adresáři jen echo Když zadáte požadované řetězce, dostanete výstup shellu:

$ ./command1.sh 
file exists
file moved
$ ./command2.sh 
file copied
file emptied
$ ./allcommands.sh 
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

Rychle sed členění

sed 's/^/['"${i%.sh}"'] /'
  • s/ přejde do režimu „shoda a nahrazení vzoru regulárních výrazů“
  • ^/ znamená "odpovídají začátku každého řádku"
  • ${i%.sh} se děje v kontextu shellu a znamená "$i , ale odstraňte příponu .sh "
  • ."
  • ['"${i%.sh}"'] / nejprve vytiskne [ , pak opustí citovaný kontext a uchopí $i proměnnou z shellu, poté znovu vstoupí a skončí s ] a mezerou.

Linux
  1. Zobrazit výstup příkazu nebo obsah souboru ve formátu sloupce

  2. Přidejte předponu na začátek každého řádku

  3. Jak připojit výstup do souboru?

  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Příkaz pro výstup obsahu souboru do Stdout?

  3. Jak vytisknout výstup příkazu Linuxu do souboru?

  1. Jak analyzovat každý řádek textového souboru jako argument příkazu?

  2. Přesměrování výstupu příkazu do souboru a terminálu

  3. Příkaz pro výstup každého řádku dopředu a poté zpět