Prefix to each output of a command on runtime
Solution 1
I assume that what you are doing in your allcommands.sh is:
command1.sh
command2.sh
Just relace it with
command1.sh | sed "s/^/[command1] /"
command2.sh | sed "s/^/[command2] /"
Solution 2
A minimal example of allcommands.sh
:
#!/bin/bash
for i in command{1,2}.sh; do
./"$i" | sed 's/^/['"${i%.sh}"'] /'
done
With command1.sh
and command2.sh
executable and in the same directory just echo
ing the wanted strings, this gives the shell output:
$ ./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
breakdown
sed 's/^/['"${i%.sh}"'] /'
s/
enters "regexp pattern match and replace" mode^/
means "match the beginning of every line"${i%.sh}
happens in the shell context and means "$i
, but strip the suffix.sh
"['"${i%.sh}"'] /
at first prints a[
, then exits the quoted context to grab the$i
variable from the shell, then re-enters to finish with the]
and a space.
Related videos on Youtube
Ivan Dokov
Web developer since 2006. Linux fan since 2011. SOreadytohelp
Updated on September 18, 2022Comments
-
Ivan Dokov 9 months
I am trying to make a modular script. I have several scripts/commands which are called from a single script.
I want to prefix the output of each separate command.Examle:
My files are allcommands.sh / command1.sh / command2.sh
command1.sh outputs
file exists
file moved
command2.sh outputs
file copied
file emptied
allcommands.sh runs the scripts command1.sh and command2.sh
I want to prefix each output of these two scripts like this:
[command1] file exists
[command1] file moved
[command2] file copied
[command2] file emptied
-
j_kubik almost 10 yearsTry running each command piping it through
sed "s/\^/command1 /"
-
Ivan Dokov almost 10 yearsGive me please an example with the information that I give. I don't really understand the
sed
functionality. I'm sorry.
-
-
Ivan Dokov almost 10 yearsThanks for the clarifications. Your answer was helpful indeed, but @j_kubik's example was just the one I need.