0

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

但是当我执行这个脚本时它不起作用。

请一些身体帮助我。

4

2 回答 2

1

我希望看到你执行:

exec "su", "-l", "$IdsID", "-c", "vncserver -randr ...";

这使得 Perl 脚本在很大程度上无关紧要,因为您可以在 shell 中将其编写为:

exec su -l "${1:-$USER}" -c "vncserver -randr ..."

使用sudo而不是su. 不同的是,使用 时su,您必须知道其他用户的密码;使用sudo,您只需要知道自己的密码(并且系统管理员必须授予您使用sudo手头任务的权限)。

于 2013-06-11T12:40:49.073 回答
0

当您使用反引号时,会创建一个子 shell 并停止主程序。当该子外壳中的进程完成时,控制返回到主程序。因此,在这种情况下,我想它su永远不会退出,并且vncserver不会与您想要的用户一起运行(也不会退出以将控制权返回给 perl 脚本)——因为它是在另一个su从未发生过的子 shell 中执行的。

您可能需要在同一行中执行这些命令:

my @result = qx(su -l $IdsId; vncserver -randr ....);

尽管这是否有效,但您必须自己找出答案。

于 2013-06-11T09:53:01.590 回答