gpt4 book ai didi

git - Bash 脚本帮助查找

转载 作者:太空狗 更新时间:2023-10-29 14:36:14 26 4
gpt4 key购买 nike

我正在尝试编写一个由每日 cron 计划调用的 bash 脚本,它将循环所有子目录以查找 .git 目录,在该存储库上运行 git pull --all 以更新 repo 并获取任何新分支,跟踪这些分支,然后继续下一个 repo 。我是 bash 脚本初学者并且熟悉一些 linux。我的问题是我在 How to clone all remote branches in Git? 找到的 for 循环但现在似乎无法正常运行,因为我已经将它引入我的脚本和对 cd ${line}.. 的调用,这似乎没有按预期工作。我想知道我做错了什么以及如何解决它的一些方向。谢谢。

我当前的脚本 gitcron.sh:

#!/bin/bash

find . -maxdepth 2 -name .git -type d -print > .gitrepos

while read -r line; do
cd ${line}/..
git pull --all
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
done < ".gitrepos"

.gitrepos 生成的文件:

./codeigniter/.git
./magento/.git
./magento2/.git

我的问题:

gitcron.sh: line 6: cd: ./magento2/.git/..: No such file or directory
fatal: it does not make sense to create 'HEAD' manually
error: unknown switch `>'

最佳答案

问题是您已经使用 cd ${line}/.. 更改了工作目录(并不断更改),即转到 {line} 的父目录>。一切都在同一个 shell session 中完成。第一次运行后,目录将更改为 line 变量的第一个值的父级,因此下一次运行将(可能)失败,因为找不到父级(因此 .git 也不会出现)。

要解决这个问题,您可以:

  • find 中使用目录的绝对路径:

    find /foo/bar/ ...

    然后像现在一样使用 while

  • 或者在子 shell 中运行 cd 和连续的 block :

    while ...; do (cd ...; ...); done <file

作为旁注,(总是)引用您的变量扩展以防止分词和路径名扩展。

关于git - Bash 脚本帮助查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44993623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com