Supongo que lo que está haciendo en allcommands.sh es:
command1.sh
command2.sh
Simplemente reemplácelo con
command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
Un ejemplo mínimo de allcommands.sh
:
#!/bin/bash
for i in command{1,2}.sh; do
./"$i" | sed 's/^/['"${i%.sh}"'] /'
done
Con command1.sh
y command2.sh
ejecutable y en el mismo directorio solo echo
ing las cadenas deseadas, esto da la salida de 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
Rápido sed
desglose
sed 's/^/['"${i%.sh}"'] /'
s/
ingresa al modo "coincidencia y reemplazo de patrones de expresión regular"^/
significa "coincidir con el principio de cada línea"${i%.sh}
sucede en el contexto de shell y significa "$i
, pero elimina el sufijo.sh
"['"${i%.sh}"'] /
al principio imprime un[
, luego sale del contexto citado para tomar el$i
variable del shell, luego vuelve a ingresar para terminar con el]
y un espacio.