Préfixe à chaque sortie d'une commande lors de l'exécution

16

J'essaie de faire un script modulaire. J'ai plusieurs scripts / commandes qui sont appelés à partir d'un seul script.
Je veux préfixer la sortie de chaque commande distincte.

Examinez:

Mes fichiers sont allcommands.sh / command1.sh / command2.sh

sorties command1.sh
file exists
file moved

sorties command2.sh
file copied
file emptied

allcommands.sh exécute les scripts command1.sh et command2.sh

Je veux préfixer chaque sortie de ces deux scripts comme ceci:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied

Ivan Dokov
la source
Essayez d'exécuter chaque commande en la passantsed "s/\^/command1 /"
j_kubik
Donnez-moi s'il vous plaît un exemple avec les informations que je donne. Je ne comprends pas vraiment la sedfonctionnalité. Je suis désolé.
Ivan Dokov

Réponses:

21

Je suppose que ce que vous faites dans votre allcommands.sh est:

command1.sh
command2.sh

Relacez-le simplement avec

command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
j_kubik
la source
9

Un exemple minimal de allcommands.sh:

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

Avec command1.shet command2.shexécutable et dans le même répertoire juste echoles chaînes voulues, cela donne la sortie du 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

rapide sedventilation

sed 's/^/['"${i%.sh}"'] /'
  • s/ passe en mode "Regexp Pattern Match and Replace"
  • ^/ signifie "correspondre au début de chaque ligne"
  • ${i%.sh}se produit dans le contexte du shell et signifie " $i, mais supprimez le suffixe .sh"
  • ['"${i%.sh}"'] /imprime d'abord a [, puis quitte le contexte cité pour saisir la $ivariable du shell, puis revient pour terminer avec les ]espaces et.
Daniel Andersson
la source
Merci pour les clarifications. Votre réponse a été utile en effet, mais l'exemple de @ j_kubik était juste celui dont j'avais besoin.
Ivan Dokov