我有这个 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克隆失败?
像许多其他命令一样(
ls
将在多列显示之间切换,而ls | cat
将每行显示1个项目,grep
将为匹配项着色,而grep | cat
将有纯输出...),git clone
检查它的输出(看起来像 git clone
专门检查它的 stderr)是否实际上是一个终端(tty),并据此更改它输出的信息。
重定向标准输出时看不到进度表是正常行为。
您可以通过添加
git clone
指示 --progress
在 stderr 上输出其进度;如果你打开它并仍然将 stderr 重定向到 /tmp/build.log
,你会发现 build.log
文件的内容有点奇怪。
检查您的“git 克隆不起作用”的印象是否真实,或者只是因为您不再拥有仪表而看不到任何进展。