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

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

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

#/bin/ksh
...
newgrp test_grp1
...

笔记:我使用的是 Unix AIX 操作系统。

答案1

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

如果您使用or ,则 的处理newgrp也会有所不同。将其实现为相当于.所以,就像,bashkshkshexec /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"

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

答案2

一旦进程启动,它就无法获得任何额外的权限。因此,您无法在脚本中间获得组成员身份。您可以使用额外的组成员身份运行整个脚本:

newgrp test_grp1
/path/to/script

您无法更改真实的 GID 中间脚本。如果您确实需要,请切换到可以使用的语言,例如 Perl。不过,很少需要更改您的真实 GID,因为这并不重要。通常,偶尔调用chgrp(首先创建没有组权限的文件,然后运行chgrp,然后添加组权限就足够了;如果您创建具有组权限的文件,则存在竞争条件:第一个组中的用户可以打开在你有时间运行之前文件chgrp)。

相关内容