如何从git ls-remote中捕获错误代码?

时间:2014-07-25 21:05:29

标签: git bash error-handling error-code

有时,我的“git ls-remote”语句通过HTTP返回401 Unauthorized状态,但并非总是如此。如何在Bash中捕获此错误状态,以便在获得HTTP 401状态时不继续使用我的Bash脚本?

我这样做:

#!/bin/bash
GSERVER_STATUS=$(git ls-remote http://$GREMOTE/$GGROUP/$GREPO.git master | cut -f 1)
# rest of script goes here

大约50%的时间,它有效。另外50%,我得到了:

error: The requested URL returned error: 401 while accessing http://USER:PASS@SERVER/GROUP/REPO.git/info/refs

fatal: HTTP request failed

(当然,我更改了上面的一行,以保持我的登录凭据匿名。)

1 个答案:

答案 0 :(得分:1)

您可以通过/tmp/TSTRET将其重定向到文件,例如2>/tmp/TSTRET,然后测试该文件是否为空,或者cat该文件并测试结果以查看是否它是NULL:

#!/bin/bash
GSERVER_STATUS=$(git ls-remote http://$GREMOTE/$GGROUP/$GREPO.git master 2>/tmp/TESTRET | cut -f 1)

if [[ -n `cat /tmp/TESTRET` ]] 
then exit;
fi

# rest of script goes here

如果字符串-n为NOT NULL,则cat /tmp/TESTRET返回true,表示生成了错误消息。 [ ]test的替代语法。

注意:我实验性地评估了GSERVER_STATUS的价值而没有一贯的运气。

另外 - 我在这里使用了反引号,但$(cat /tmp/TESTRET)也适用于这种情况。

如果您想查看产生的错误,可以在cat块中插入if

if [[ -n $(cat /tmp/TESTRET) ]]
then
    cat /tmp/TESTRET;
    exit;
fi

最后,如果从其他脚本中调用此脚本,则可能不希望调用exit,因此您可以将其他代码嵌套到内部以避免完全退出脚本:

if [[ -n $(cat /tmp/TESTRET) ]]
then
    cat /tmp/TESTRET;
else
    # rest of script goes here
    # ...
fi

if [[ -z $(cat /tmp/TESTRET) ]]
then
    # rest of script goes here
    # ...
else
    cat /tmp/TESTRET;
fi