Prefisso per ogni output di un comando in fase di esecuzione


16

Sto cercando di creare una sceneggiatura modulare. Ho diversi script / comandi che vengono chiamati da un singolo script.
Voglio anteporre l'output di ciascun comando separato.

examle:

I miei file sono allcommands.sh / command1.sh / command2.sh

output command1.sh
file exists
file moved

output command2.sh
file copied
file emptied

allcommands.sh esegue gli script command1.sh e command2.sh

Voglio anteporre ogni output di questi due script in questo modo:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied


Prova a eseguire ciascun comando eseguendo il piping attraversosed "s/\^/command1 /"
j_kubik il

Dammi per favore un esempio con le informazioni che do. Non capisco davvero la sedfunzionalità. Mi dispiace.
Ivan Dokov,

Risposte:


21

Presumo che quello che stai facendo in allcommands.sh sia:

command1.sh
command2.sh

Rilassalo e basta

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

9

Un esempio minimo di allcommands.sh:

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

Con command1.shed command2.sheseguibile e nella stessa directory solo echocon le stringhe desiderate, questo dà l'output della shell:

$ ./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

sedRipartizione rapida

sed 's/^/['"${i%.sh}"'] /'
  • s/ entra nella modalità "regexp pattern match and replace"
  • ^/ significa "abbina l'inizio di ogni riga"
  • ${i%.sh}accade nel contesto della shell e significa " $i, ma togli il suffisso.sh "
  • ['"${i%.sh}"'] /inizialmente stampa a [, quindi esce dal contesto citato per afferrare la $ivariabile dalla shell, quindi rientra per terminare con ]e uno spazio.

Grazie per i chiarimenti. La tua risposta è stata davvero utile, ma l'esempio di @ j_kubik era proprio quello di cui avevo bisogno.
Ivan Dokov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.