1

私はそのようにパイプしたい2つのコマンドを持っています:command1 | command2command1何も出力しない場合command2でも出力します。何も出力されないcommand1 | command2ときに出力を停止 するにはどうすればよいですか?command1

具体的な例:

function find_string_in_file {
find . -iname "*$1*" | xargs ack-grep "$2"
}
alias findag='find_string_in_file'

filename.py現在のディレクトリまたはそのサブフォルダに存在しない場合findag filename.py "some word"でも、と同じ出力を返しますack-grep "some word"

4

2 に答える 2

4

パイプは条件付きではないため、前のステージの終了ステータスに基づいて後のステージを無効にすることはできません。特定の例ではfind、パイプラインが不要になるようにコマンドを変更できます。

find . -iname "*$1*" -exec ack-grep "$2" '{}' +

一致するファイルがない場合、execテストはトリガーされません。

于 2013-02-23T19:50:15.200 に答える
1

パイプを介さずに行で引数を読み取るために使用xargsする方法を変更できます。ack-grepこれは期待どおりに機能します

find . -iname "*$1*" | xargs -I{} ack-grep "$2" {}
于 2013-02-23T19:51:09.283 に答える