在 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
,它可能无法按预期工作。
标题中的主要问题:我想在每一行脚本输出前加上自脚本开始以来的时间。
背景。我将 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
,它可能无法按预期工作。