我对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";
但是当我执行这个脚本时,它无效。
请一些人帮帮我。
答案 0 :(得分:1)
我希望看到你执行:
exec "su", "-l", "$IdsID", "-c", "vncserver -randr ...";
这使得Perl脚本在很大程度上无关紧要,因为您可以在shell中将其写为:
exec su -l "${1:-$USER}" -c "vncserver -randr ..."
最好使用sudo
而不是su
。区别在于su
,您必须知道其他用户的密码;使用sudo
,您只需知道自己的密码(并且系统管理员必须已授予您使用sudo
执行此任务的权限。)
答案 1 :(得分:0)
使用反引号时,会创建一个子shell并停止主程序。当该子shell中的进程完成时,控件返回到主程序。所以在这种情况下,我想su
永远不会退出,并且vncserver
不会与您想要的用户一起运行(也不会退出以将控制权返回给perl脚本) - 因为它被执行在另一个子shell中su
从未发生过。
您可能需要在同一行中执行这些命令:
my @result = qx(su -l $IdsId; vncserver -randr ....);
虽然这是否有效,但你必须自己找出来。