Eu assumo que o que você está fazendo no seu allcommands.sh é:
command1.sh
command2.sh
Apenas relacione-o com
command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
Estou tentando criar um script modular. Eu tenho vários scripts / comandos que são chamados de um único script.
Eu quero prefixar a saída de cada comando separado.
Examinar:
Meus arquivos são allcommands.sh / command1.sh / command2.sh
outputs de command1.sh
file exists
e file moved
command2.sh saídas de file copied
e file emptied
allcommands.sh executa os scripts command1.sh e command2.sh
Eu quero prefixar cada saída desses dois scripts da seguinte maneira:
[command1] file exists
[command1] file moved
e [command2] file copied
e [command2] file emptied
Um exemplo mínimo de allcommands.sh
:
#!/bin/bash
for i in command{1,2}.sh; do
./"$i" | sed 's/^/['"${i%.sh}"'] /'
done
Com command1.sh
e command2.sh
executável e no mesmo diretório apenas echo
ing das strings desejadas, isso fornece a saída da 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
sed
breakdown sed 's/^/['"${i%.sh}"'] /'
s/
entra no modo "correspondência de padrões regexp e substitui" ^/
significa "corresponde ao início de cada linha" ${i%.sh}
acontece no contexto da shell e significa " $i
, mas tira o sufixo .sh
" ['"${i%.sh}"'] /
primeiro imprime um [
, depois sai do contexto citado para pegar a variável $i
do shell e, em seguida, entra novamente para terminar com o ]
e um espaço.