perl内から次のunixコマンドを実行しようとしています
`git log --pretty=format:%H | grep $id | wc -l`;
というエラーが表示され続けます
sh: -c : syntax error near unexpected token '|'
sh -c : '| wc -l'
このエラーを修正するにはどうすればよいですか
問題は、123<NEWLINE>
代わりに123
in$id
があるため、次をシェルに渡していることです。
git log --pretty=format:%H | grep 123
| wc -l
それ以外の
git log --pretty=format:%H | grep 123 | wc -l
の値を修正します$id
。最良の方法は、おそらく経由chomp
です。
外部のUnixコマンドの代わりにPerlサブルーチンを使用してこの機能の一部を実装すると、おそらくより堅牢なスクリプトが得られます。
バッククォートを使用すると、スクリプトをすばやく作成できますが、スクリプトを実行しているユーザー用に構成されているUnixシェル(ワイルドカード拡張、入出力リダイレクト、パイピング、等。)。これは実際にはすべてのプログラミング言語に当てはまり、ほとんどの言語(perlを含む)には、シェルを使用せずに外部コマンドを実行するためのより安全な方法があります。しかし、Perlが作成された理由の1つは、1つのプログラミング言語で多数のUnixコマンドのテキスト処理機能を組み合わせることができるようにすることでした。