【发布时间】:2018-08-16 02:33:44
【问题描述】:
这开始是一个模糊的问题,RPM scriptlet 偶尔会在 awk 上失败。我将其缩小到以下几点: scriptlet 使用 GNU 扩展:length(array) 构造,在 posix 模式下运行时不受支持。到目前为止还可以。我不明白在 sudo 下运行 awk 如何改变 posix 合规行为。这是一个简单的 awk 脚本,它应该在 GNU 模式下运行,而在 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 行为的底层机制是什么?
【问题讨论】:
-
我不会在数组“过时”上调用
length,它是 POSIX awk 的 GNU 扩展。 -
你是否为非root用户设置了
POSIXLY_CORRECT环境变量? -
@BenjaminW。谢谢,就是这样。