第一篇文章在这里,但多年来一直是个潜伏者。我已经用谷歌搜索了很长时间,但是找不到我想要的东西(许多主题不明确的主题,并没有要求主题暗示它的目的……)。对awk或脚本不是新手,只是有点生锈:)
我正在尝试编写awk脚本,它将在运行时设置shell env值-供另一个bash脚本使用,以后再使用。我不能简单地使用awk中的stdout报告要设置的值(即“export what = 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方法以外,我证明对我来说失败了,我看不到如何做到(除了将这些值写入调用脚本可以读取和读取的“random”文件中, imo还是有点脏),因此,帮忙!
欢迎所有想法/建议/评论!
最佳答案
您不能更改父进程的环境。如果
MYSCRIPT_RESULT=$(awk stuff)
是无法接受的,您的要求无法完成。
关于awk:直接在awk脚本中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988663/