第一篇文章在这里,但多年来一直是潜伏者.我已经谷歌搜索了很多年,但无法找到我想要的东西(许多不切实际的话题主题,不要求主题暗示它做什么......).不是awk或脚本的新手,只是有点生锈:)
我正在尝试编写一个awk脚本,它将在运行时设置shell env值 - 以便稍后拾取并使用另一个bash脚本.我不能简单地使用awk中的stdout来报告我想要设置的值(即"export whatever = 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
Run Code Online (Sandbox Code Playgroud)
在scriptfile.awk中,我试过(没有成功)
1 /)直接构建和执行adhoc字符串:
{
cmdline="export MYSCRIPT_RESULT=1"
cmdline
}
Run Code Online (Sandbox Code Playgroud)
2 /)使用系统功能:
{
cmdline="export MYSCRIPT_RESULT=1"
system(cmdline)
}
Run Code Online (Sandbox Code Playgroud)
......但这些都行不通.我怀疑这两个命令是在shell中创建一个子shell,awk正在执行,并按照我的要求进行操作(通过将文件作为测试来证明),但是一旦"cmd"/系统调用完成,子shell就会死掉,不幸的是采取我设置的任何东西 - 所以我的环境设置改变不要坚持"awk的调用者"的观点.
所以我的问题是,你如何直接在awk中设置env变量,以便调用进程可以在awk执行完成后访问这些env值?它真的可能吗?
除了上面的adhoc/system方法,我已经证明这对我来说是失败的,我无法看到如何做到这一点(除了将这些值写入某个地方的'随机'文件,以便被调用脚本拾取和读取,无论如何,imo有点脏,因此,帮助!
欢迎所有想法/建议/意见!
您不能更改父进程的环境。如果
MYSCRIPT_RESULT=$(awk stuff)
Run Code Online (Sandbox Code Playgroud)
是无法接受的,您的要求无法完成。