Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash中向脚本的输出添加标题行(仅当脚本生成输出时)_Bash - Fatal编程技术网

在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

我有一个Bash脚本,可以调用其他几个脚本(同步用户列表/检测不一致)。对于生成输出的每个脚本,我希望在实际输出之前添加一个头,但是对于没有任何输出的脚本,我不希望打印任何内容

目前,我只是在任何情况下打印标题行:

#!/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{…}',但它总是执行代码,即使没有生成输出。我找不到相应的起始输出
  • 正如我所说,临时变量不是我想要的,因为我希望输出在创建时显示出来
使用GNU时:更换

./${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&/'