Git 吉特';s ls远程测试开关始终返回false
出于某种原因,我下面的bash开关将始终返回false/或者,我正在寻找一种方法来抑制来自git的响应,当存储库不存在时,这将与用户/传递序列一样,但无法使其工作Git 吉特';s ls远程测试开关始终返回false,git,bash,Git,Bash,出于某种原因,我下面的bash开关将始终返回false/或者,我正在寻找一种方法来抑制来自git的响应,当存储库不存在时,这将与用户/传递序列一样,但无法使其工作 [ git ls-remote https://github.com/ehime/Bash-Tools.git &>- /dev/null ] && { echo Exists } || { echo Nope } 我尝试过这个,它确实有效,但不会像我想要的那样压制内容 [ "$
[ git ls-remote https://github.com/ehime/Bash-Tools.git &>- /dev/null ] && {
echo Exists
} || {
echo Nope
}
我尝试过这个,它确实有效,但不会像我想要的那样压制内容
[ "$(git ls-remote foo)" ] && { echo Yes; } || { echo No; }
在测试中,您没有运行git,而是为测试提供了一系列字符串(这几乎肯定会导致
[
输出错误消息)
如果您试图运行该命令,忽略所有输出并仅测试返回代码,则要删除括号[
和]
。它们不属于If
语法的一部分。[
是二进制代码(与test
同义)
如果git ls remote…;则
将运行git并测试其返回代码
此外,那里的
/dev/null
没有为您做任何事情。$>-
已经关闭了标准输入和标准输出。/dev/null
有一个“ref”参数指向git ls remote
我要找的是
[ "$(git ls-remote $REPOSITORY_URL 2> /dev/null)" ] && { echo Exists; } || { echo Nope; }
如果有人想要,可以使用受限制git shell的完整git命令
# If no project name is given
if [ $# -eq 0 ]; then
# Display usage and stop
echo "Usage: addrepo <project.git>" ; exit 1
fi
# Set the project name, adding .git if necessary
project=$(echo "$*" | sed 's/\.git$\|$/.git/i')
[ "$(git ls-remote $project 2> /dev/null)" ] && {
cd /home/git/repositories/
git clone --mirror "${project}"
} || {
echo "[ERROR] Unable to read from '${project}'"; exit 1
}
#如果没有给出项目名称
如果[$#-eq 0];则
#显示用法和停止
echo“用法:addrepo”;退出1
fi
#设置项目名称,必要时添加.git
项目=$(echo“$*”| sed's/\.git$\\\\124;$/.git/i')
[“$(git ls remote$project 2>/dev/null)”]&&{
cd/home/git/repositories/
git克隆--镜像“${project}”
} || {
echo“[ERROR]无法读取“${project}”;退出1
}
在该测试中,您没有运行git,而是为测试提供了一系列字符串(这几乎肯定会导致[
输出错误消息)https://github.com/ehime/Bash-Tools.git &>-/dev/null)]&{echo Yes;}|{echo No;}这将正确运行git命令,但由于您正试图放弃所有也无法实现目标的输出。您可能确实希望测试返回代码,而不是输出。这就是为什么存在--退出代码
的原因,但是是的,这将在假定ls remote
仅在某些r找到EF(假设这是您想要的测试)。不幸的是,退出代码在成功与回购协议通信时通常返回bool false,因此也总是会使语句失败。IMHO尝试镜像空存储库是毫无意义的。啊,没错,--exit code
的文档似乎确实表明返回代码没有它可能那么有用。