2

bahsscriptが自宅のファイルで文字列を見つけたときにアクションを実行しようとしていますが、どういうわけか機能せず、理由がわかりません.. grepが0を返さないという印象があります(文字列は実際にはファイルに存在します)。

#!/bin/bash 
find /home/ -type f | xargs grep -q 'stringtofind' 
 if [ $? == 0 ] #if the result is not equal to zero 
 then 
  echo "Action" 
 else 
  echo "Pas d'action" 
  exit 1 
 fi 
exit 0 

次のことをしているときに、シェルは 0 ではなく 123 を返します。

find /home/anselmewebsite/ -type f | xargs grep -q 'stringtofind' ; echo $?
shell returns : 123

ハイライトをお寄せいただきありがとうございます。

4

2 に答える 2

2

grepのオプションを使用し-rて、フォルダー内で再帰的に grep することができます。

grep -r yourstring /path/to/your/folder

マニュアルページから:

-R, -r, --recursive

各ディレクトリの下にあるすべてのファイルを再帰的に読み取ります。これは -d recurse オプションと同等です。

于 2013-07-16T10:21:03.447 に答える
2

見つけたマニュアルを調べると、これは xargs の戻りコードです。

コマンドの呼び出しがステータス 1-125 で終了した場合は 123

これは、grep がゼロ以外の終了コードで返されたことを意味します。これは、grep が文字列と一致しない場合です。

通常、選択された行が見つかった場合、終了ステータスは 0 になり、見つからなかった場合は 1 になります。

そのため、-R recursive オプションを指定して grep を使用することを強くお勧めします。いずれかのファイルに一致するものがあれば、これは 0 を返すはずです。上記の例では、検索パターンを含まないファイルを 1 つ取得するとすぐに、xargs は 123 を返し、スクリプトのロジックが壊れます。

于 2013-07-16T10:27:29.470 に答える