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 echoing 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$ivariable 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 monthsI 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 movedcommand2.sh outputs
file copied
file emptiedallcommands.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 throughsed "s/\^/command1 /" -
Ivan Dokov almost 10 yearsGive me please an example with the information that I give. I don't really understand thesedfunctionality. 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.