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
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] /"
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 echo
ing 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
sed
rupturesed '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.