由于某些原因,下面的bash开关总是会返回false /或者,我正在寻找一种方法来抑制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; }
答案 0 :(得分:1)
您没有在该测试中运行git,您正在测试一系列字符串(这几乎肯定会导致[
输出错误消息)。
如果您尝试运行该命令而忽略所有输出,并仅测试要删除包围[
和]
的返回码。它们不是if
语法的一部分。 [
是二进制文件(与test
同义)。
if git ls-remote ...; then
将运行git并测试其返回码。
此外,/dev/null
没有为您做任何事情。 $>-
已经关闭标准输入和标准输出。 /dev/null
git ls-remote
有“ref”参数。
答案 1 :(得分:0)
我在寻找的是
[ "$(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
}