2016-11-15 8 views
7

バックリックを使ってPerlでLinuxコマンドを実行しようとしています。私はLinux上で直接実行するとき、それは動作しますが、Perlはバッククォートを通じてそれをしないとき、私はこのエラーを取得する:ターミナルで動作しても、バッククォートで構文エラーが発生するのはなぜですか?

sh: -c: line 0: syntax error near unexpected token `>' 
sh: -c: line 0: `(/src/storageUtil --diagnostic 2> >(tee >(cat >&2) >&1)) > log.txt' 

問題のコードの行は次のとおりです。

$output = `(/src/storageUtil --diagnostic 2> >(tee >(cat >&2) >&1)) > log.txt`; 

何についてどのような洞察力このエラーが発生する可能性があります大いに感謝します。

おかげ

+11

コマンドラインで 'bash'を使ってコードをテストしたことがありますが、Perlから呼び出す際に' sh'で実行しようとしています。 –

+2

あなたは絶対的な天才です – user3307598

+2

私はファイルのリダイレクトをお勧めします。通常は、パイプラインの実行ファイルを 'open'してから、シェルにアウトソーシングするのではなく、自分でファイルioを処理するほうがよいでしょう。 – Sobrique

答えて

10

あなたはおそらくbashとコマンドラインで、あなたのコードをテストしたが、あなたはPerlのからそれを呼び出すときshを経由してそれを実行しようとしています。

コマンドをBourneシェルと互換性のあるものに変更するか、明示的にbashを呼び出します。

+1

ありがとう:)あなたは救い主です – user3307598

関連する問題