私はこのようなperlのスクリプトでコマンドを実行します。ubuntu perlはシェル出力を取得できませんか?
#!/usr/bin/env perl
`tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
私は/tmp/js.tgz
を得たが、私は冗長な出力を得ることができませんか?
私はこのようなperlのスクリプトでコマンドを実行します。ubuntu perlはシェル出力を取得できませんか?
#!/usr/bin/env perl
`tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
私は/tmp/js.tgz
を得たが、私は冗長な出力を得ることができませんか?
Backticks(``) or qx
はコマンドを実行し、STDOUT
を返します。だから、STDOUT
をキャプチャするための変数が必要です。 STDERR
はそのままです。
#!/usr/bin/env perl
my $stdout = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
print "$stdout";
あるいは、
あなたはsystem
.ITを使用することができます(STDOUT
とSTDERR
は変更されません)コマンドを実行し、その終了ステータスを返します。
my $exit_status = system('tar zvcf /tmp/js.tgz -C /home/cuidehe/js .');
print "Exit Status: $exit_status\n";
あなたはPerlの内部コマンド出力のターゲットを指定する必要があります。
my $output = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
print $output;
すべての出力行が$出力に終わります。 変数$ STDOUTの命名は、Perlで予約されているキーワードなので良くありません。
このコマンドは、複数の出力行を生成する可能性があります。 open
を使用すると良いかもしれない:
open my $fh,'-|','tar zvcf /tmp/js.tgz -C /home/cuidehe/js .'
or die 'Error launching tar';
while (<$fh>) {
chomp; # Remove the trailing \n from the input line
print "Got line: $_\n"; # Do whatever you want here.
}
close $fh;
あなたも同じ$fh
にこれはSTDERRにエラーをリダイレクトすると、あなたが(ファイルおよびエラー)の両方を取得し
open my $fh,'-|','tar zvcf /tmp/js.tgz -C /home/cuidehe/js . 2>&1'
or die 'Error launching tar';
を使ってSTDERRを捕捉することができます。
IPC::Open3は、異なるファイルハンドルに(STDOUTとSTDERR)の両方を取り込むことができます。
更新(@ Dummy00001のおかげで):
my @output = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
は、1つのアレイ項目としてタール出力の各行を返します。
完成度: 'my @output = qx {tar ...};' – Dummy00001
ありがとうございました。それを答えに加えました。 – Sebastian
バックテックの前に印刷してみてください。コマンドの出力は表示されません。 – eballes
あなたの期待される行動は何ですか? –
@ el.pescado私はosxでこのコマンドを使用します。私は 'print'を必要としません。私は出力を得ます – roger