如何从外部访问 "git submodule foreach" 中使用的变量?
How to access variables used in "git submodule foreach" from outside?
如何递归到所有子模块并将信息保存到数组?该数组应该可以从 git submodule foreach
外部访问,在下面的示例中,我试图保存其中包含 foo
的所有路径。
$ declare -a paths
$ git submodule foreach --recursive '[[ "$name" = *"foo"* ]] && \
( echo $path; paths+=($path) ) || true'
Entering 'bar-1'
Entering 'foo-1'
foo-1
Entering 'foo-2'
foo-2
Entering 'foo-8'
foo-8
Entering 'foo'
foo
Entering 'baz'
$
$ echo ${paths[@]}
$
将值作为赋值语句写入临时文件。获取临时文件。
git submodule foreach
跑分shell。这意味着没有直接影响父级 shell 的方法,反过来,这意味着您需要间接影响父级 shell .
有很多方法可以做到这一点,但一个简单的方法是写入文件,然后使用 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
复制了stdout,然后将其fd 1移动到fd 4,将3移动到1,并关闭3。现在内部命令的stdout与外部标准输出相同,而 fd 4 是要 eval
-ed 的项目所在的位置。
如何递归到所有子模块并将信息保存到数组?该数组应该可以从 git submodule foreach
外部访问,在下面的示例中,我试图保存其中包含 foo
的所有路径。
$ declare -a paths
$ git submodule foreach --recursive '[[ "$name" = *"foo"* ]] && \
( echo $path; paths+=($path) ) || true'
Entering 'bar-1'
Entering 'foo-1'
foo-1
Entering 'foo-2'
foo-2
Entering 'foo-8'
foo-8
Entering 'foo'
foo
Entering 'baz'
$
$ echo ${paths[@]}
$
将值作为赋值语句写入临时文件。获取临时文件。
git submodule foreach
跑分shell。这意味着没有直接影响父级 shell 的方法,反过来,这意味着您需要间接影响父级 shell .
有很多方法可以做到这一点,但一个简单的方法是写入文件,然后使用 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
复制了stdout,然后将其fd 1移动到fd 4,将3移动到1,并关闭3。现在内部命令的stdout与外部标准输出相同,而 fd 4 是要 eval
-ed 的项目所在的位置。