grepはコマンドラインでうまく機能しますが、スクリプトでは何も返しません。

grepはコマンドラインでうまく機能しますが、スクリプトでは何も返しません。

特定の基準に一致するファイルのリストをファイルにインポートする小さなスクリプトを作成しようとしています。

#!/bin/sh
cd /var/www_data/patch/
grep --include=\*.{php,ini,conf,sh} -ril -P "'([\d\w\-\_\.]+)(@domain.com)'" "/var/www_data/something/" 2>&1 > mails

このgrep行はコマンドラインでうまく機能しますが、スクリプトを介して実行すると結果のファイルサイズが0バイトになります。なぜこれが起こるのかご存知ですか?

答え1

私の間違いを見つけました。そうしたはずだった#!/bin/bash。ヒントをありがとう@steeldriverに感謝します。

答え2

スクリプトでシェル拡張を有効にするには、bashにコマンドラインオプションを渡す必要があります。これはスクリプト自体で行うことができます。

#! /bin/bash
set -B   #enables expansion
set -X   #enables debugging

最初のオプションを使用すると、コマンドラインに書かれているようにすべてがシェルに渡され、2番目のオプションは多くの出力を生成するので、何が起こっているのかを確認するのに役立ちますが、スクリプトが正常に動作したら確実に無効にしたいと思います。

関連情報