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 № 1Você 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
}