0

私はperlが初めてです。一部のUNIXサーバーでVNCセッションを作成するために複数のUNIXコマンドを実行するperlスクリプトを作成しようとしています。

これが私のスクリプトです-

#!/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 スクリプトはほとんど無関係になります。

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

sudoよりも使ったほうがいいかもしれませんsu。違いは、suでは、他のユーザーのパスワードを知っている必要があることです。を使用するとsudo、自分のパスワードを知っているだけで済みます (また、システム管理者がsudo手元のタスクに使用する許可を与えている必要があります)。

于 2013-06-11T12:40:49.073 に答える
0

バッククォートを使用すると、サブ シェルが作成され、メイン プログラムが停止します。そのサブシェルでの処理が終了すると、制御はメインプログラムに戻ります。したがって、この場合、それはsu決して終了vncserverせず、意図したユーザーで実行されません (また、Perl スクリプトに制御を戻すために終了することもありません) su

おそらく必要なのは、これらのコマンドを同じ行で実行することです。

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

これが機能するかどうかは、自分で調べる必要があります。

于 2013-06-11T09:53:01.590 に答える