通过perlscript执行多个unix命令

时间:2013-06-11 09:41:03

标签: perl

我对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";

但是当我执行这个脚本时,它无效。

请一些人帮帮我。

2 个答案:

答案 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 ....);

虽然这是否有效,但你必须自己找出来。