如何从外部访问“ git submodule foreach”中使用的变量?

时间:2018-10-23 17:53:12

标签: bash git git-submodules

如何递归到所有子模块并将信息保存到数组?该数组应该可以从.auth().preemptive().basic(CLIENT_ID, CLIENT_SECRET)外部访问,在下面的示例中,我试图保存其中包含git submodule foreach的所有路径。

foo

2 个答案:

答案 0 :(得分:2)

git submodule foreach在子外壳中运行。这意味着没有直接的方法可以影响父外壳,而这又意味着您需要间接地影响父外壳。

执行此操作的方法有很多,但是一种简单的方法是写入文件,然后使用source.来读取文件。鉴于以上语法,您大概正在使用bash,所以:

git submodule foreach --recursive '[[ "$name" = *"foo"* ]] && \
     ( echo $path; echo "paths+=($path)" >> /tmp/paths ) || true'
source /tmp/paths
rm /tmp/paths
echo ${paths[@]}

执行此操作的另一种方法是eval foreach的输出,但这比较棘手,因为您必须小心使用 all 输出。 exec有一个方便的技巧,可以重定向各种文件描述符:

exec 1>&3
eval $(command)

其中command扩展(通过别名或shell函数,脚本或任何其他方式)扩展为:

command() {
    exec 4>&1 1>&3 3>&-
    echo now we can print normally
    echo var=value 1>&4 # this is a directive for the "eval"
}

外部3>&1为内部command复制标准输出,然后将其fd 1移至fd 4,将3移至1,然后关闭3。现在内部命令的stdout为与外部标准输出相同,而fd 4是要进行eval编辑的项目。

答案 1 :(得分:0)

将这些值作为赋值语句写入临时文件。源临时文件。

相关问题