/ / GITのls-remoteテストスイッチが常にfalseを返す - git、bash

GITのls-remoteテストスイッチは常にfalseを返します - git、bash

どういうわけか私の下の私のbashスイッチはいつもそうしますfalseを返す/または、リポジトリが存在しない場合のUser / Passシーケンスに関してgitからの応答を抑制するための方法を探していましたが、これでうまくいきませんでしたか?

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

私はこれを試してみて、それは動作しますが、私が望んでいたようなコンテンツを抑制しません

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

回答:

回答№1は1

そのテストではgitを実行していません(testに一連の文字列を与えています) [ エラーメッセージを出力します。

すべての出力を無視してそのコマンドを実行しようとしていて、ブラケットをドロップしたい戻りコードだけをテストする場合 [ そして ]。彼らはの一部ではありません if 構文。 [ バイナリです(と同義 test)。

if git ls-remote ...; then gitを実行して戻りコードをテストします。

さらに、 /dev/null 何もしていません。 $>- 標準入力と標準出力はすでに閉じられています。 /dev/null に "ref"引数があります git ls-remote.


回答№2の場合は0

探していたのは

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

誰かがそれを望んでいるなら制限付きgitシェルのための完全な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
}