如果 bash 脚本已启动,git 克隆将无法工作

问题描述 投票:0回答:1

我有这个 bash 脚本:

#!/bin/bash -xe
set -xe

function build() {
  git clone --mirror https://github.com/digi-embedded/u-boot.git
}

time build $@ |& tee /tmp/build.log

当我运行它时:

./build.sh

它挂了。添加详细/跟踪,如下所示:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 \
git clone --mirror https://github.com/digi-embedded/u-boot.git

表明卡在了fetch部分。

但是,单独运行 git 克隆效果很好:

git clone --mirror https://github.com/digi-embedded/u-boot.git

然后我更改了脚本以删除 T 恤,一切正常!

#!/bin/bash -xe
set -xe

function build() {
  git clone --mirror https://github.com/digi-embedded/u-boot.git
}

time build $@ # |& tee /tmp/build.log

为什么tee会导致git克隆失败?

git tee
1个回答
1
投票

像许多其他命令一样(

ls
将在多列显示之间切换,而
ls | cat
将每行显示1个项目,
grep
将为匹配项着色,而
grep | cat
将有纯输出...),
git clone
检查它的输出(看起来像
git clone
专门检查它的 stderr)是否实际上是一个终端(tty),并据此更改它输出的信息。

重定向标准输出时看不到进度表是正常行为。

您可以通过添加

git clone
指示
--progress
在 stderr 上输出其进度;如果你打开它并仍然将 stderr 重定向到
/tmp/build.log
,你会发现
build.log
文件的内容有点奇怪。


检查您的“git 克隆不起作用”的印象是否真实,或者只是因为您不再拥有仪表而看不到任何进展。

© www.soinside.com 2019 - 2024. All rights reserved.