仅限 bash 的解决方案很好,但您可以通过使用其他工具来简化重新启动,从而获得更好的性能。就像您问题中的脚本一样,以下内容采用标准输入上的单词表。
#!/bin/sh
# Get the current position, or 0 if we haven't run before
if [ -f /tmp/processed ]; then
read processed < /tmp/processed
else
processed=0
fi
# Skip up to the current position
awk -v processed="$processed" 'NR > processed' | while read -r line; do
# Run your commands
command1 using $line
command2 using $line
# Record our new position
processed=$((processed + 1))
echo $processed > /tmp/processed
done
哦,我写这个的方式,它与 Bourne shell 兼容,所以它不需要 bash。