【发布时间】:2020-10-04 17:10:27
【问题描述】:
我被这个ksh93 bug(也是here)咬了。这是一个接近我的用例的SSCCE:
$ cat bug.sh
#!/bin/ksh93
unset a b
c=0
function set_ac { a=1; c=1; }
function set_abc { ( set_ac ; b=1 ) }
set_abc
echo "a=$a b=$b c=$c"
$ ./bug.sh
a=1 b= c=0
因此,虽然set_abc 在子shell 中调用set_ac,但分配a=1 会传播到父shell。有几个已知的workarounds,我倾向于用
set_abc
function set_abc { ( ulimit -t unlimited ; set_ac ; b=1 ) }
这似乎工作正常。现在我想知道ulimit -t unlimited 除了引发子shell fork(这是解决方法的重点)之外是否有任何副作用,这可能会在将来给我带来麻烦。 (FWIW:这应该由没有 root 权限的用户运行。)
【问题讨论】: