在脚本中运行“newgrp”命令时出现问题

cha*_*987 9 scripting aix group

我想更改脚本中的工作组。所以我newgrp test_grp1在我的脚本中写了一行。但是我的脚本在运行这一行后会自动退出。有什么解决方案可以克服这个问题吗?

#/bin/ksh
...
newgrp test_grp1
...
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是 Unix AIX 操作系统。

Mat*_*Mat 13

newgrp使用您指定的组启动一个子shell。因此,在该子shell 完成之前,脚本中的该行不会完成。

newgrp如果您使用bash或 ,的处理也不同kshksh将其实现为内置命令,相当于exec /usr/bin/newgrp [group]. 所以,就像execnewgrp永远不会回来。(请参阅此处的一些文档。)

如果您希望它返回,并希望在更改了组标识的子shell 中执行命令,您可以使用重定向。

例如:

#!/bin/ksh

echo "Before newgrp"
/usr/bin/newgrp users <<EONG
echo "hello from within newgrp"
id
EONG
echo "After newgrp"
Run Code Online (Sandbox Code Playgroud)

注意:/usr/bin/newgrp被显式调用以避免隐式execfrom ksh。该脚本中的最后一个命令将在原始 shell 中运行,具有原始组标识。

  • 来自我的爱,使用`newgrp docker`拯救了这一天 (3认同)