我是perl的新手。我正在尝试创建一个perl脚本,它将在一些unix服务器上执行多个unix命令来创建VNC会话。
这是我的脚本-
#!/usr/bin/perl -w
use Carp;
use strict;
use warnings;
# here get the parameters idsid
my $IdsId=$ARGV[0];
#excecute the commands here
my $user=`su -l $IdsId`;
my @finalresult=`vncserver -randr 1024x768,800x600,1024x768,1152x824,1280x1024,1280x800,1440x900,1400x1050,1600x1200,1920x1200`;
print "@finalresult";但是当我执行这个脚本时,它不工作。
请谁来帮帮我。
发布于 2013-06-11 20:40:49
我希望看到你执行以下命令:
exec "su", "-l", "$IdsID", "-c", "vncserver -randr ...";这使得Perl脚本在很大程度上无关紧要,因为您可以在shell中将其编写为:
exec su -l "${1:-$USER}" -c "vncserver -randr ..."使用sudo可能比使用su更好。不同之处在于,使用su时,您必须知道其他用户的密码;使用sudo时,您只需知道自己的密码(并且系统管理员必须授予您使用sudo执行手头任务的权限)。
发布于 2013-06-11 17:53:02
当您使用反引号时,将创建一个子shell,并暂停主程序。当子shell中的进程完成时,控制返回到主程序。因此,在本例中,我假设su永远不会退出,vncserver不会以您想要的用户身份运行(也不会退出以将控制权返回给perl脚本) --因为它是在另一个从未发生su的子shell中执行的。
您可能需要在同一行中执行这些命令:
my @result = qx(su -l $IdsId; vncserver -randr ....);不过,这是否有效,你必须自己去弄清楚。
https://stackoverflow.com/questions/17041014
复制相似问题