Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 吉特·巴什;如果;及;至于;同一脚本中的逻辑似乎不正确_Git_Bash_Bitbucket_Git Bash - Fatal编程技术网

Git 吉特·巴什;如果;及;至于;同一脚本中的逻辑似乎不正确

Git 吉特·巴什;如果;及;至于;同一脚本中的逻辑似乎不正确,git,bash,bitbucket,git-bash,Git,Bash,Bitbucket,Git Bash,我有一个脚本,可以在我所有的bitbucket存储库中循环,如果它在本地不存在,它应该克隆它,如果它在本地存在,它应该拉它。假设我没有任何需要的目录。我可以运行下面的脚本,一切正常。如果我再次运行同一个脚本,它仍然会命中If语句的第一部分,并说“目标已经存在,并且不是空的存储库”。现在让我们假设我去掉了“!”,它现在击中了所有逻辑的第二部分。这对我来说没有意义。我是git bash的新手,因此任何帮助都将不胜感激 #!/bin/bash #script to get all repositori

我有一个脚本,可以在我所有的bitbucket存储库中循环,如果它在本地不存在,它应该克隆它,如果它在本地存在,它应该拉它。假设我没有任何需要的目录。我可以运行下面的脚本,一切正常。如果我再次运行同一个脚本,它仍然会命中If语句的第一部分,并说“目标已经存在,并且不是空的存储库”。现在让我们假设我去掉了“!”,它现在击中了所有逻辑的第二部分。这对我来说没有意义。我是git bash的新手,因此任何帮助都将不胜感激

#!/bin/bash
#script to get all repositories under a user from bitbucket
#Usage: getAllRepos.sh [user]

curl -u user https://api.bitbucket.org/1.0/users/user > repoinfo
for repo_name in $(grep -oE '\"slug\": "[^"]*"' repoinfo | cut -f4 -d\")
do
if [ ! -d "$repo_name" ];  then

git clone "git@bitbucket.org:user/$repo_name.git" "C:\\Users\\user\\.ssh\\$repo_name"

else 

git pull "git@bitbucket.org:user/$repo_name.git"

fi
done
我已经更新了代码以包含推荐网站的更正,但它仍然不起作用。

#/bin/bash
#!/bin/bash
die() { echo "ERROR: $*" >&2; exit 1; }

user=${1:-Monzingo}

mkdir -p ~/repos || die "Destination directory does not exist and could not be created"
cd ~/repos || die "Could not cd to destination directory"

while read -r repo_name <&3; do
  repo_name=${repo_name%$'\r'} # handle DOS newlines in input stream
  if [ -d "$repo_name" ]; then
    (cd "$repo_name" && exec git pull)
  else
    git clone "git@bitbucket.org:$user/$repo_name.git" "$repo_name"
  fi
done 3< <(curl -u "$user" "https://api.bitbucket.org/1.0/users/$user" \
            | jq -r '.repositories[].slug')
die(){echo“错误:$*”>&2;退出1;} 用户=${1:-Monzingo} mkdir-p~/repos | | die“目标目录不存在,无法创建” cd~/repos | | die“无法将cd刻录到目标目录”
而read-r repo_名称只是一个旁白。。我认为克隆到“.ssh”文件夹不是一个好主意。用grep和cut解析JSON是非常非常错误的。为了你和我的理智,请使用jq:另外,这里有很多bug会被捕获……而且你不能在
cd
命令中使用反斜杠作为分隔符。这是UNIX,而不是Windows。看起来脚本正在检查
C:\\Users\\username\\.ssh
中是否存在目录,但正在克隆到
C:\\Users\\username\\.ssh\\Droids
-如果您修复了该差异,它应该可以工作。使用
bash-x scriptname
执行它,并注意发生故障时运行的确切命令。如果您运行
PS4=”:$LINENO+'bash-xscriptname
,甚至会在日志中包含每个命令的行号……此外,您运行的bash的具体版本也很重要;某些Windows版本不正确支持进程替换。是否需要在slug末尾打勾?在开始之前缺少另一个。现在就编辑好了……顺便说一句,如果bash在进程替换时给你一个语法错误,你可以重新构造一些东西以避免需要它:
curl…|jq | while read-r repo|u name;做完成
——这已经在BashFAQ 24中给出了警告,但这些警告实际上对您现在正在做的事情并不重要。