Ich gehe davon aus, dass Sie in Ihrer allcommands.sh Folgendes tun:
command1.sh
command2.sh
Ersetzen Sie es einfach mit
command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
Ein Minimalbeispiel für allcommands.sh
:
#!/bin/bash
for i in command{1,2}.sh; do
./"$i" | sed 's/^/['"${i%.sh}"'] /'
done
Mit command1.sh
und command2.sh
ausführbar und im selben Verzeichnis nur echo
Wenn Sie die gewünschten Zeichenfolgen eingeben, ergibt dies die Shell-Ausgabe:
$ ./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
Schnell sed
Zusammenbruch
sed 's/^/['"${i%.sh}"'] /'
s/
Wechselt in den "Regexp-Mustervergleichs- und -ersetzungs"-Modus^/
bedeutet "Übereinstimmung mit dem Anfang jeder Zeile"${i%.sh}
kommt im Shell-Kontext vor und bedeutet "$i
, aber entfernen Sie das Suffix.sh
"['"${i%.sh}"'] /
gibt zunächst eine[
aus , verlässt dann den Kontext in Anführungszeichen, um$i
abzurufen Variable aus der Shell, wird dann erneut eingegeben, um mit]
abzuschließen und ein Leerzeichen.