我正在尝试创建一个脚本,该脚本将使我git log
每 1 秒刷新一次。这是我的脚本:
while :
do
clear
git log --all --decorate --oneline --graph
sleep 1
done
它无法工作,因为git log
需要等待用户点击q
退出 - 因此循环卡住了。我该如何修复这个问题?
答案1
基于这个答案--no-pager
从 SO 开始,您可以通过在 后立即添加来停止退出git
。
log
等待的不是命令q
,而是less
执行分页的工具。通过告知git
您不需要分页器,log
命令将打印所有输出,然后立即退出。
当然,如果有多个屏幕,您将会打印出所有内容,并且必须向上滚动才能看到最近的提交。您可以通过添加类似 的内容来限制要记录的提交数量,从而解决这个问题-22
。这将限制为 22 个提交,当然您可以选择其他数字。
就像是:
while :
do
clear
git --no-pager log --all --decorate --oneline -22 --graph
sleep 1
done
答案2
你可以用以下命令将其变成一行watch
:
watch --color -n 3 git log --all --decorate --oneline --graph --color=always
调整-n
标志来改变刷新率。
答案3
如果您想防止屏幕因执行循环的每次迭代而闪烁,我建议将输出存储git log
在文件中,并在标准输出中实际重新运行命令之前检查与前一次迭代的差异:
GIT_LOG_CMD="git --no-pager log --all --decorate --oneline -22 --graph"
PREV_OUTPUT_FILE="/tmp/git_log_output.txt"
if [ ! -f "$PREV_OUTPUT_FILE" ]; then
touch "$PREV_OUTPUT_FILE"
fi
while :
do
CURRENT_OUTPUT=$($GIT_LOG_CMD)
if [ "$CURRENT_OUTPUT" != "$(cat $PREV_OUTPUT_FILE)" ]; then
clear
$GIT_LOG_CMD
echo "$CURRENT_OUTPUT" > "$PREV_OUTPUT_FILE"
fi
sleep 1
done