在Bash中向脚本的输出添加标题行(仅当脚本生成输出时)
我有一个Bash脚本,可以调用其他几个脚本(同步用户列表/检测不一致)。对于生成输出的每个脚本,我希望在实际输出之前添加一个头,但是对于没有任何输出的脚本,我不希望打印任何内容 目前,我只是在任何情况下打印标题行:在Bash中向脚本的输出添加标题行(仅当脚本生成输出时),bash,Bash,我有一个Bash脚本,可以调用其他几个脚本(同步用户列表/检测不一致)。对于生成输出的每个脚本,我希望在实际输出之前添加一个头,但是对于没有任何输出的脚本,我不希望打印任何内容 目前,我只是在任何情况下打印标题行: #!/bin/bash for scrpt in test1.sh test2.sh; do echo "Script $scrpt printed out:" ./${scrpt} done 但是,我想要的是“Script$Script pri
#!/bin/bash
for scrpt in test1.sh test2.sh; do
echo "Script $scrpt printed out:"
./${scrpt}
done
但是,我想要的是“Script$Script printed out:”仅当./${scrpt}确实产生一些输出时才出现
我可以将输出存储在变量中并检查:
#!/bin/bash
for scrpt in test1.sh test2.sh; do
ctnt=`./${scrpt}`
if [ -n "$ctnt" ]; then
echo -e "Script returned (with temporary variable): \n$ctnt"
fi
done
但是,我的脚本运行了相当长的一段时间,因此我希望输出在创建后立即显示。在打印第一个输出之前,应该显示标题。因此,尽管上述方法生成了我需要的输出,但对我来说并不是一个好的解决方案
我想到的是可以称之为:
#!/bin/bash
for scrpt in test1.sh test2.sh; do
./${scrpt} | print-text-before-first-output "Script $scrpt printed:"
done
有这样的实用程序吗
- 我发现了awk'BEGINFILE{…}',但它总是执行代码,即使没有生成输出。我找不到相应的起始输出
- 正如我所说,临时变量不是我想要的,因为我希望输出在创建时显示出来
./${scrpt}
与
这有用吗
/script | awk'FNR==1{print“This is my Header”}1'
仅使用bash
append|而IFS=read-r行;如果[[$switch!=“1”]],则执行此操作;然后打印“%s\n”标题;printf“%s\n”“$line”;开关=“1”;else printf“%s\n”“$line”;fi;已完成
转义可能无法移植到您的sed
;如果它不起作用,也许可以尝试放一个文字换行符,可能前面有一个反斜杠。更可移植的解决方案是切换到Awk或Perl。
./${scrpt} | sed '1s/^/Header\n&/'