如何在被调用脚本中的每个回显前面添加文本?

如何在被调用脚本中的每个回显前面添加文本?

假设我有两个脚本,一个调用另一个,如何在每个回显前面添加文本以直观地指示回显来自被调用的命令?

#!/usr/bin/env sh
echo - BEGIN
./b.sh # Append "-" to each echo?
echo - END

b.sh

#!/usr/bin/env sh
echo - BEGIN
echo - END

我想要的输出:

- BEGIN
-- BEGIN
-- END
- END

我无法触及b.sh我需要流式传输输出。

答案1

如果它只是echo您想要在前面加上 a 的命令的文本输出-,您可以重新定义echo为函数并来源另一个脚本具有.特殊的内置函数,因此它继承了该函数:

#!/usr/bin/env sh
printf '%s\n' '- BEGIN'
echo() {
  printf %s -
  command echo "$@"
}
. ./b.sh
printf '%s\n' '- END'

(请注意,在任何情况下echo最好避免

答案2

如果您的意思是要将其添加到第二个脚本打印的所有输出中,只需将其输出通过管道传输到sed.在您的示例中,a.sh如下所示:

#!/usr/bin/env sh
echo - BEGIN
./b.sh | sed 's/^/-/' 
echo - END

这导致:

$ a.sh
- BEGIN
-- BEGIN
-- END
- END

相关内容