Awk在sudo下失去了posix模式

时间:2018-03-07 21:10:40

标签: awk sudo gawk

这开始是一个模糊的问题,RPM脚本偶尔会在awk上失败。我将其缩小到以下内容:scriptlet使用GNU扩展:length(array)构造,在posix模式下运行时不支持。好到目前为止。我不明白的是如何在sudo下运行awk会改变posix合规行为。这是一个应该在GNU模式下运行的简单awk脚本,并且应该在posix模式下失败。

$ cat ./try
/bin/awk 'BEGIN{x[1]=foo;x[2]=bar;print length(x);}'
$ /bin/awk --version | grep Awk
GNU Awk 4.0.2
$ id
uid=0(root) gid=0(root) groups=0(root)
$ /bin/sh ./try
awk: cmd. line:1: fatal: length: received array argument
$ sudo /bin/sh ./try
2
$ 

改变awk行为的基本机制是什么?

1 个答案:

答案 0 :(得分:1)

Awk(真的在linux下gawk)由POSIXLY_CORRECT环境变量控制,该变量偶尔会从原始用户的环境继承。有问题的安装必须由root运行,但有时管理员将成为root用“su”来保持环境,从而保持他的POSIXLY_CORRECT,强制gawk进入posix模式,并且失败了GNU长度(数组) ) 延期。在其他时候,管理员将运行“sudo”或“su - ”成为root用户,从root的干净环境开始并成功运行扩展的gawk功能。