]# d='xxx'; git clone $d || echo "g. cl. failed with $?"
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128
作为一个脚本,这不是很明显;我会这样做:
]# . gc.sh
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128
与cat gc.sh:
d='xxx'
git clone $d; ret=$?
if (( $ret > 0 ))
then echo "g. cl. failed with $ret"
fi
一般的做法是
它适用于
git
:仅当
git clone
命令以状态 0 退出时才进行第一个分支,表示成功;任何其他退出状态都被视为失败,并导致采用第二个分支。使用不存在的文件
a
,cat
如果git
它相当于:现在我有命令的输出,即 cat 的标准输出被标准错误替换,作为“结果”值。返回码免费提供为
$?
.为了比较成功
cat
:-> 成功重定向到 null、空错误消息。
-> 成功,所以 "$e" 保存数据。
-> 消息详细,但退出代码保持统一。
是的,我有一个目录
xxx
:git clone .git xxx
当我试图引发特定错误时,它刚刚为我做了。(所以我切换到
cat
)仍然 ret=1。
评论中的链接显示了一些关于缺少 git特定错误代码的投诉。我认为这是一个双重误解,因为(瓷器)git 命令是为交互式使用而制作的,而(bash)shell 对输入和输出有自己的概念。
在我的示例中,我不应该抱怨 cat 的统一错误代码“1”,或者尝试在复杂脚本中捕获和解析消息(这与简单程序相反)。我应该先检查一切是否准备就绪,并在必要时告诉用户(错误或警告)。
我想知道你从什么样的错误代码中得到
git clone
。git 的手册页对返回码非常沉默。就像 vi 的例子一样。非常不同mount
,它的“代码可以被 ORed”。给定一个“不安全”命令
git clone $d
,我可以将错误代码与源一起添加到消息中。这是一个交互式单线:作为一个脚本,这不是很明显;我会这样做:
与
cat gc.sh
:否则
$?
不够新鲜。并且对真/假的测试也是明确的。