【问题标题】:quitting git log from a bash script从 bash 脚本中退出 git log
【发布时间】:2012-09-22 12:31:58
【问题描述】:

我正在尝试编写一个“实时 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

我的问题是 git log 使用寻呼机,您必须按 q 退出,否则它将永远坐在那里。有没有办法在 bash 中对退出命令进行编码?我尝试呼应 q,但没有运气。 (我在这里看到另一篇建议 echo "q" > /dev/console 的帖子——但我的环境中没有开发控制台)

系统:win7 机器 - 使用 mingw (1.7.6.msysget.0) 模拟 bash

更新

这是完成的脚本

#!/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

-40 是个人喜好。将其更改为适合您和终端屏幕尺寸的任何数字。

【问题讨论】:

    标签: git bash mingw pager


    【解决方案1】:

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

    git --no-pager log
    

    所以完整的命令是

    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"
    

    【讨论】:

    • 好的,这是一个开始。我没有听说过 --no-pager 标志。但尝试调用该命令。格式完全消失了,输出中有(我假设)转义字符。完全无用的输出。 * [31m 4c29b0d [m2012-10-01[34m (HEAD) [m 更新 test.php [1m(xero)[m
    • 它在我的 Windows 7 机器上运行良好。我猜你的终端配置有问题?我在命令提示符下使用它,而不是通过 mingw。
    • 必须确认 - 在 cygwin bash + 其他环境中也可以正常工作。不过没有使用 mingw 的经验。
    • 很奇怪。我正在使用 console2 (sourceforge.net/projects/console) 作为 mingw 的前端。如果那是造成它的原因,我会伤害它。我仍然赞成你的帖子。
    • 可能和这个有关,console2的自定义颜色? stackoverflow.com/questions/2445003/… - 虽然你可能不需要它,因为它也可以与 cat 一起使用
    【解决方案2】:

    试试下面的代码:

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

    编辑

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

    【讨论】:

    • 补充说明| cat -
    • 太棒了!那是票!但我不明白为什么。 “猫”到底在做什么?为什么它会覆盖寻呼机?
    • 它强制STDOUT经过cat
    • 哦,我明白了!我错过了你正在管道所有 git log INTO cat 的事实!谢谢!!!!
    • 这会创建一个不必要的额外过程,而不会重置 PAGER 变量
    【解决方案3】:

    设置,在您的脚本中:

    export PAGER=
    

    会成功的

    【讨论】:

    • 我厌倦了在 shebang 行和 while 循环之后,没有运气。实际上,这看起来根本没有效果。我厌倦了将其设置为无、更少、更多和 askodjaskdlj(这应该会导致我假设的错误),但我的结果没有什么不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2023-01-28
    • 2019-05-23
    相关资源
    最近更新 更多