/ / Switch de teste ls-remote do GIT sempre retornando falso - git, bash

O switch de teste ls-remote do GIT sempre retornando false - git, bash

Por alguma razão, meu bash switch abaixo semprereturn false / or, eu estava procurando uma maneira de suprimir a resposta do git que irá como para uma sequência User / Pass quando o repositório não existe, mas não conseguiu fazer isso funcionar?

[ git ls-remote https://github.com/ehime/Bash-Tools.git &>- /dev/null ] && {
echo Exists
} || {
echo Nope
}

Tentei fazer isso e funciona, mas não suprime o conteúdo como eu queria

[ "$(git ls-remote foo)" ] && { echo Yes; } || { echo No; }

Respostas:

1 para resposta № 1

Você não está executando o git nesse teste, você está testando uma série de strings (o que quase certamente está causando [ para emitir uma mensagem de erro).

Se você está tentando executar esse comando ignorando todas as saídas e teste apenas o código de retorno que deseja eliminar [ e ]. Eles não fazem parte do if sintaxe. [ é um binário (sinônimo de test).

if git ls-remote ...; then irá executar git e testar seu código de retorno.

Além disso, o /dev/null não está fazendo nada por você. $>- já está fechando a entrada e a saída padrão. /dev/null existe o argumento "ref" para git ls-remote.


0 para resposta № 2

O que eu estava procurando era

[ "$(git ls-remote $REPOSITORY_URL 2> /dev/null)" ] && { echo Exists; } || { echo Nope; }

Comando git completo para um shell git restrito, se alguém quiser

# 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
}