1

実行して出力をgrepしたいスクリプトがたくさんあります。たとえば、これを実行すると機能し、目的の出力行があります。

$ myScript.sh

これを実行しても、次のことはできません。

$ myScript.sh | grep something

さらに確認した後、myScript.shには次の内容が含まれています。

#!/bin/sh     
...
$JAVA_HOME/bin/java  the.real.script.is.here ${1+"$@"}

「|grepsomething」が$@リストに吸い込まれていると思います。出力を簡単にパイプする方法について何かアイデアはありますか?ありがとう!

編集: 変数がどのように解析されるかについての情報をみんなに感謝します。それは問題である何か他のものでなければなりません。多分それは私が探しているものです。私の出力では、「/SE_2012.old」の行を探しています。「|grepold」を使用してスクリプトを再度実行しましたが、出力がありません。「|grepSE」で実行したところ、結果が出ました。私はそれを「古い」でもう一度実行して、私が夢中になっているのかどうかを確認しました。結果は DIDでした。

4

2 に答える 2

3

まず、あなたの仮定は間違っています。シェルは、コマンド ラインを十分に解析して、パイプと引数の違いを識別します。そのため、リダイレクト、パイプ、サブシェル、およびその他の低レベルの式をエスケープするために引用符が必要です。

さて、当面の問題に:実行時に出力が表示されないと仮定します

$ myScript.sh | grep something

おそらくバッファリングの効果が見られます*。残念ながら、Java アプリケーションでどのように発生しているのかを正確に伝えることはできないため、直接的な解決策を提供することはできませんが、おそらく Java コードの内部を調べればわかるでしょう。

* 出力が標準出力以外の場所に出力されるのとは対照的に。

于 2013-01-04T16:38:40.667 に答える
1

"| grep something" が $@ リストに吸い込まれることはありえないので、別の問題があるはずです。おそらく、スクリプトは tty 出力に行バッファリングを使用し、それ以外の場合はフル バッファリングを使用しますか? (スクリプトが機能しないと結論付ける前にスクリプトの完了を待ちますか?) おそらく、「grep something」の「something」は、入力行と一致しない正規表現として (予期せず) 解釈されますか?

  • catの代わりに試してみてくださいgrep something: うまくいきますか?
  • 「何か」の本当の価値を私たちに見せてください。
于 2013-01-04T16:38:44.007 に答える