第一次在这里发帖,但多年来一直是潜伏者。我已经用谷歌搜索了很长时间,但找不到我想要的东西(许多不要求该主题暗示它的主题的大主题......)。对 awk 或脚本并不陌生,只是有点生疏:)
我正在尝试编写一个 awk 脚本,该脚本将在运行时设置 shell env 值 - 以便稍后获取另一个 bash 脚本并使用。我不能简单地使用 awk 中的标准输出来报告我想要设置的这个值(即“导出任何内容 = awk cmd here
”),因为那已经指向 awkscript 正在创建的“结果文件”(另外我在最终代码无论如何)。
作为示例测试脚本,演示我的问题:
echo $MYSCRIPT_RESULT # returns nothing, not currently set
echo | awk -f scriptfile.awk # do whatever, setting MYSCRIPT_RESULT as we go
echo $MYSCRIPT_RESULT # desired: returns the env value set in scriptfile.awk
在 scriptfile.awk 中,我尝试过(没有成功)
1/) 直接构建和执行一个临时字符串:
{
cmdline="export MYSCRIPT_RESULT=1"
cmdline
}
2/) 使用系统函数:
{
cmdline="export MYSCRIPT_RESULT=1"
system(cmdline)
}
...但这些不起作用。我怀疑这两个命令在 awk 正在执行的 shell 中创建了一个子 shell,并按照我的要求做(通过触摸文件作为测试证明),但是一旦“cmd”/系统调用完成,子 shell 就会死掉,不幸的是拿走我用它设置的任何东西——所以我的环境设置更改不会从“awk 的调用者”的角度来看。
所以我的问题是,你如何直接在 awk 中设置 env 变量,以便在 awk 执行完成后调用进程可以访问这些 env 值?真的有可能吗?
除了上面的 adhoc/system 方式,我已经证明这对我来说是失败的,我看不到如何做到这一点(除了将这些值写入某个“随机”文件以供调用脚本拾取和读取,其中无论如何,imo有点脏),因此,帮助!
欢迎所有想法/建议/评论!