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


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] /"

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.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.