1

exec 内で tar を呼び出す必要がある perl スクリプトがあります。

exec("tar zcf /tmp/mytarball.gz directoryToTarBall > /dev/null 2>&1" or die ("$!")

これは私がフォークした子プロセスであり、その間、STDOUT に完全な停止を書き込んで tar の進行状況を監視しています。私が抱えている問題は、tarボールを作成するときにtarを冗長にしたくないということです-出力をstdoutにエコーしたくない....プログレスカウンター(フルストップ)を画面にエコーバックしたいだけです。>/dev/null 2>&1exec コマンド内でa を渡すことができると思っていましたが、うまくいきませんでした。

どんなアイデアでも大歓迎です。感謝と敬意

4

2 に答える 2

3

exec LISTシェルの引用による驚きを避けるために、フォームを使用してください。これには、シェルが行うリダイレクトを実行する必要もあります。

use 5.10.0;  # //

my $pid = fork // die "$0: fork: $!";   # / fix Stack Overflow highlighting
if ($pid) {
  waitpid $pid, 0 or die "$0: waitpid: $!";
  warn "$0: child exited abnormally" if $?;
  print ".\n";  # done!
}
else {
  open STDOUT, ">",  "/dev/null" or die "$0: open: $!";
  open STDERR, ">&", \*STDOUT    or exit 1;
  exec "tar", "zcf", "/tmp/mytarball.gz", "directoryToTarBall";
  exit 1;
}
于 2013-01-26T16:41:51.803 に答える
0
perl -e "exec(\"ls >/dev/null\")"

少なくとも私にとってはうまくいきます。しようとしている2>&1

この複雑な混乱も機能します

perl -e "exec(\"ls >&2 2>&1 1>/dev/null\")"

これでも機能しますが、おそらくすべきではないと思いました

perl -e "exec(\"ls 1>&2 >/dev/null\")"

正確にはどこで立ち往生していますか?

于 2013-01-26T16:16:31.647 に答える