从bash脚本退出git log

xer*_*ero 7 git bash mingw pager

我正在尝试编写一个"live git log"bash脚本.这是迄今为止的代码:

#!/bin/sh
while true;
do
    clear
    git log --graph -10 --all --color --date=short --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset"
    sleep 3
done
Run Code Online (Sandbox Code Playgroud)

我的问题是git log使用了一个寻呼机,你必须按下q才能退出,否则它将永远坐在那里.有没有办法在bash中编写quit命令?我试着呼应q,没有运气.(我在这里看到另一篇帖子建议回显"q">/dev/console - 但我的环境中没有开发控制台)

system:win7 box - 用mingw模拟bash(1.7.6.msysget.0)

UPDATE

这是完成的脚本

#!/bin/sh
while true;
do
    clear
    git log \
    --graph \
    --all \
    --color \
    --date=short \
    -40 \
    --pretty=format:"%C(yellow)%h%x20%C(white)%cd%C(green)%d%C(reset)%x20%s%x20%C(bold)(%an)%Creset" |
    cat -
    sleep 15
done
Run Code Online (Sandbox Code Playgroud)

-40是个人品味.将其更改为适合您和您的终端屏幕大小的任何数字.

eis*_*eis 21

添加--no-pager是要走的路:

git --no-pager log
Run Code Online (Sandbox Code Playgroud)

所以完整的命令就是

git --no-pager log --graph -10 --all --color --date=short --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset"
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 5

试试下面的代码:

git log \
    --graph -10 \
    --all \
    --color \
    --date=short \
    --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset" |
    cat -
Run Code Online (Sandbox Code Playgroud)

编辑

| cat - 不是特定于 git,当你有一个寻呼机并且你想打印到时,它适用于每个用例 STDOUT

  • 这会创建一个不必要的额外过程,而重置 PAGER 变量不会 (2认同)