是否可以使用 find -exec 保留环境变量?我没有看到任何使用 FreeBSD 版本的 find 的选项。如果绝对需要,我可以切换到 for 循环,但希望使用 exec 的简洁性以及它更快。
我能想到的另一个选项并不漂亮,那就是转储环境,然后在我正在执行的命令中读回它。
编辑:
find . -type f -name '*/*.patch/go' -exec go install {} \;
在这个例子中,我想去使用 http 代理。我已经有代码告诉 git 配置全局 http 代理(在此之上)。
所以,从下面的例子中,我需要在前面加上 sh? 为什么?
子进程总是继承环境。这意味着您启动的实用程序
find ... -exec
将有权访问该环境。测试这个:
这里我清除了两个 shell 变量
myvar1
和myvar2
,然后我设置它们并导出myvar1
但不是myvar2
。这意味着myvar1
将由任何子进程继承,而myvar2
不会被继承。正如您在 的输出中看到的那样
find
,导出myvar1
的文件在单引号sh -c
脚本中可用,该脚本find
调用-exec
成批找到的路径名。您也可以在命令前面使用赋值
find
来设置环境变量的值,而无需在当前 shell 中设置它。这是标准语法,而不仅仅是find
工作原理。此语法的另一个不使用的示例
find
:注意
x
当前shell中未设置的方式(最后printf
输出一个空行)。