假设我有两个脚本,一个调用另一个,如何在每个回显前面添加文本以直观地指示回显来自被调用的命令?
灰
#!/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