web-dev-qa-db-fra.com

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

J'essaie de faire un script modulaire. J'ai plusieurs scripts/commandes appelées à partir d'un seul script.
[.____] Je veux préfixer la sortie de chaque commande séparée.

Examiner:

Mes fichiers sont AllCommands.sh/Command1.sh/Command2.sh

Command1.sh sorties
[.____] file exists
[.____] file moved

Command2.sh sorties
[.____] 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 celui-ci:
[.____] [command1] file exists
[.____] [command1] file moved
[.____] [command2] file copied
[.____] [command2] file emptied

16
Ivan Dokov

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

command1.sh
command2.sh

Il suffit de le renouer avec

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

Un exemple minimal de allcommands.sh:

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

Avec command1.sh et command2.sh exécutable et dans le même répertoire juste echoing les chaînes recherchées, cela donne la sortie de la coque:

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

Quick sed rupture

sed 's/^/['"${i%.sh}"'] /'
  • s/ Entre "Match de modèle REGEXP et remplacer"
  • ^/ signifie "correspondre au début de chaque ligne"
  • ${i%.sh} arrive dans le contexte de Shell et signifie "$i, mais dépouiller le suffixe .sh "
  • ['"${i%.sh}"'] / d'abord imprime un [, puis sort du contexte cité pour saisir le $i variable de la coquille, puis rentre de finition avec le ] et un espace.
9
Daniel Andersson