【问题标题】:How can I make git stop printing to the screen?如何让 git 停止打印到屏幕?
【发布时间】:2016-03-01 03:38:05
【问题描述】:

我有一个使用 git pull 将特定存储库同步到它的源的 cron 作业。该命令如下所示:

@daily echo $(cd /path/to/dir && git pull origin master) > /dev/null

但我还是得到了

From https://github.com/groupname/reponame
 * branch            master     -> FETCH_HEAD

但是每当目录更新时,cron 仍然会向我发送带有输出的邮件。 如何阻止 git 产生任何输出?

【问题讨论】:

  • 您只是在重定向标准输出。尝试重定向stderr。例如2>&1 > /dev/null
  • @MarcB 这样你将stdout 复制为stderr 然后仅将stdout 重定向到/dev/null。顺序很重要; 2>&1 必须在>/dev/null 之后留下。
  • 我会将两个命令(cdgit)写入脚本文件。这样您可以更好地控制输出(可以将输出和git 的错误重定向到/dev/null 或不同的文件)。

标签: git shell cron


【解决方案1】:

也许--quiet 选项就足够了?

文档:

-q,--安静

这被传递给底层 git-fetch 以静噪传输期间的报告,以及底层 git-merge 以静噪 合并期间的输出。

【讨论】:

    【解决方案2】:

    将此添加到您的命令中:

    > /dev/null 2>&1 
    
    @daily echo $(cd /path/to/dir && git pull origin master) 2>&1 > /dev/null 2&1
    

    什么意思?

    File descriptor 1 is the standard output (stdout).
    File descriptor 2 is the standard error (stderr).
    

    看起来2>1 会将stderr 重定向到stdout,但这里的转折点是它实际上会将stderr 重定向到一个名为1 的文件。

    这可以解决问题:-)

    【讨论】:

    • 2>&1 不会重定向任何内容。它将stdout(文件描述符1)复制stderr(文件描述符2)。 stdout 已经被重定向到/dev/null,这意味着stderr 也将被重定向到/dev/null。顺序很重要:重定向必须发生在重复之前;否则只有stdout 被重定向到/dev/nullstderrstdout 之前的位置(即在屏幕上)。
    • 随时使用您拥有的任何新信息更新答案,以便其他人可以从中受益。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2011-02-13
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多