2

(-|)ファイル名が出力をパイプで送信するコマンドとして解釈されるパイプ出力とともにopenに使用されるコマンドで変数を使用するにはどうすればよいですか。

$cmd = 'ps -elf';
open( my $fh, "-|",$cmd  ) || die( "$cmd failed: $! " );

ここで、必要なオプションが$cmd = 'ps $myOptions'; どこ$myOptionsに設定されるかを確認します。たとえば、 $myOptions = "-elf"

これはどのように行うことができますか?

4

3 に答える 3

2

これには、$cmd = "ps ".$myOptions; のように文字列連結を使用できます。

于 2012-08-30T04:08:56.380 に答える
1

パイプを二重引用符で囲むとうまくいきます:

#!/usr/bin/perl

use strict;
use warnings;

my $cmd = 'ps';
my $opt = "-elf";
open( my $fh, "-|", "$cmd $opt"  ) || die( "$cmd failed: $! " );

while( <$fh>) { print "line $.: $_"; }

また、動作: "ps $opt", join( ' ', $cmd, $opt) ,$cmd . ' ' . $opt and probably many other ways. You just have to make sure that the 3rd argument to open is a string, with the proper contentps -elf`. このためには、変数を補間する (つまり、単一引用符を使用しない) ことを確認する必要があり、文字列の代わりにリストにならないようにする必要があります (つまり、連結するか、二重引用符で変数を使用します)。

于 2012-08-30T08:08:13.640 に答える
0

コマンドを単一の文字列として指定する場合 (たとえば、オプションが実際には複数の引数で構成されている場合):

my $cmd = "ps $myOptions";
open my $fh, "$cmd |" or die "$cmd failed: $!";

2 つの文字列として指定する場合 (たとえば、$myOptions常に 1 つの引数として扱う必要がある場合):

open my $fh, "-|", "ps", $myOptions or die "ps $myOptions failed: $!";
于 2012-08-30T04:00:40.640 に答える