git submodule foreach -检查子模块路径是否以

6ioyuze2  于 2023-06-04  发布在  Git
关注(0)|答案(2)|浏览(121)

我正尝试对我的存储库中的子模块的子集运行一些操作。我发现这样做的方法应该是使用git子模块foreach,然后添加一个自定义的bash命令。这是我尝试运行的代码:

git submodule foreach \
'
   echo $sm_path
   if [[ $sm_path = my_submodule_name* ]] ; then 
      echo found submodule starting with my_submodule_name
   fi
'

问题是它给了我一个语法错误,尽管bash语法应该是正确的。我尝试在git submodule foreach之后添加bash -c。这似乎解决了语法错误,但我不再得到应该包含子模块路径($sm_path)的变量。
这看起来像是鸡和蛋的问题。有什么建议可以让它运行吗?
谢谢

nmpmafwu

nmpmafwu1#

有些发行版的默认脚本shell采用了老派的错误。例如,Debian从bash切换到dash已经有一段时间了,所以它的所有孩子可能也都有了。1970年以来甚至可以在shell上工作的语法是

case $sm_path in my_submodule_name*) doit ;;  esac
4xrmg8kj

4xrmg8kj2#

如果你的/bin/sh不是Bash,不要使用bashisms。使用[ x = y ]而不是[[ x = y ]]进行比较。要在开始时测试子字符串,请使用grep

git submodule foreach \
'
   echo $sm_path
   if echo $sm_path | grep -q ^my_submodule_name || :; then 
      echo found submodule starting with my_submodule_name
   fi
'

要使用Bash,请使用以下语法:

git submodule foreach \
'bash -c "
   echo $sm_path
   if [[ $sm_path = my_submodule_name* ]] ; then 
      echo found submodule starting with my_submodule_name
   fi
"'

相关问题