在 bash 脚本输出的每一行前加上自脚本启动以来的时间

Prefix every line of bash script output with time since script start

标题中的主要问题:我想在每一行脚本输出前加上自脚本开始以来的时间。

背景。我将 GNU 与 运行 工作并行使用,其中一些工作产生输出(大多数不产生输出)。我想在每个任务的输出行前添加自该任务开始以来的时间。

您可以像这样在 bash 脚本的顶部添加一行:

#!/bin/bash

exec > >(trap "" INT TERM; while read line ; do printf "%d: %s\n" $SECONDS "$line"; done )

for ((i=0;i<10;i++)) ; do
  sleep 1
  echo hello
done

如果你想要从开始到现在的毫秒数,你可以这样做:

#!/bin/bash

exec > >(trap "" INT TERM; start=$(date +%s%N); while read line ; do now=$(date +%s%N); ((ms=(now-start)/1000000)); printf "%d: %s\n" $ms "$line"; done )

for ((i=0;i<10;i++)) ; do
  sleep 1
  echo hello
done

尝试:

parallel --lb --tagstring '{= $job->{start}||=time; $_=time-$job->{start} =}' myjob ::: {1..100}

或者:

parallel --lb --tagstring '{= $job->{start}||=::now(); $_=::now()-$job->{start} =}' myjob ::: {1..100}

如果您使用 --retries,它可能无法按预期工作。