bash 脚本
for i in $script_name
do
echo -en "running the script - $i\t - "
exec 3>&1 4>&2
var=$( { time /tmp/scripts/$i 1>&3 2>&4; } 2>&1) # Captures time only
exec 3>&- 4>&-
echo "$var"
done
打印以下内容:
running the script - Verify_disk.bash - 1.42
running the script - Verify_yum_list.bash - 10.49
running the script - Verify_size.bash - 2.93
running the script - Verify_mem_size.bash - 0.71
running the script - Verify_disk_size.bash - 2.41
running the script - Verify_wdisk.bash - 1.63
running the script - Verify_cpu.bash - 0.74
由于 $var 是打印所有这些输出的变量,我们想要对齐输出
所以会是这样的
running the script - Verify_disk.bash - 1.42
running the script - Verify_yum_list.bash - 10.49
running the script - Verify_size.bash - 2.93
running the script - Verify_mem_size.bash - 0.71
running the script - Verify_disk_size.bash - 2.41
running the script - Verify_wdisk.bash - 1.63
running the script - Verify_cpu.bash - 0.74
为了对齐最后的字段,应该对 $var 进行哪些额外的更改
答案1
执行预循环来计算最长的文件名,然后将其用作间距参数:
longest=0
for file in *.bash
do
[ "${#file}" -gt "$longest" ] && longest=${#file}
done
# ... for your execution loop
printf "running the script - %${longest}s\t- "
printf "%s\n" "$var"
我假设您的所有脚本都包含在通配符中*.bash
;根据需要进行调整。初始循环计算所需的宽度;初始printf
使用该变量来格式化循环每次迭代的脚本字段的宽度for
。
答案2
我认为您无法在脚本内进行正确的格式化,因为循环的早期迭代无法知道以下变量的宽度;两步过程怎么样?
我还冒昧地(个人喜好)右对齐时间值的输出。
将示例输入保存到文件(无法动态生成)后,我的建议如下所示:
cat yael | awk -F'-' '{printf "%s - %-30s - % 6.2f\n",$1, $2, $3}'
running the script - Verify_disk.bash - 1.42
running the script - Verify_yum_list.bash - 10.49
running the script - Verify_size.bash - 2.93
running the script - Verify_mem_size.bash - 0.71
running the script - Verify_disk_size.bash - 2.41
running the script - Verify_wdisk.bash - 1.63
running the script - Verify_cpu.bash - 0.74
因此,如果您要通过我的 awk 通过管道输出脚本的输出...