awk:直接在awk脚本中设置环境变量

标签 awk

第一篇文章在这里,但多年来一直是个潜伏者。我已经用谷歌搜索了很长时间,但是找不到我想要的东西(许多主题不明确的主题,并没有要求主题暗示它的目的……)。对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/

相关文章:

shell - Shell中如何获取一个字符串在另一个字符串中的行号

c - 根据列合并两个文件并排序

bash - 通过 bash/awk/sed/perl 删除特定文本后的新行

regex - AWK 子函数语法

awk 前置和附加文件行

bash - 当它们具有公共(public)列时将字符串从一个文件添加到另一个文件

linux - 如何使用 awk 和 cut

linux - 使用 Sed/AWK/Perl 从 block 中提取第 K 行

c - Flex正则表达式以标识AWK正则表达式

linux - 分隔符范围线函数