2016-05-30 18 views
0

現在、ターミナルのシェルグロビングがネゲートで動作するが、bashで実行しているときにエラーが表示されるのは混乱しています。シェルのグローブネゲートがbashで動作しない

.bundle.jsで終わるjsファイルを除き、./HTMLディレクトリ内のすべてのjsファイルを表示する以下のコマンドを実行します。

$ shopt -s globstar 
$ ls ./HTML/**/!(*.bundle).js 

上記のコマンド働く完璧、今のは、端末でそれを実行する

#!/usr/bin/env bash 

shopt -s globstar 
ls ./HTML/**/!(*.bundle).js 

list-js.sh bashのファイルに入れてみましょう:

$ bash list-js.sh 
list-js.sh: line 4: syntax error near unexpected token `(' 
list-js.sh: line 4: `ls ./HTML/**/!(*.bundle).js' 

ご覧のとおり、構文エラーが表示されます。

+1

あなたは 'shopt -s globstar'忘れあなたのスクリプトで –

+0

@AndreaCorbellini私はスクリプトを編集し、 'shopt -s globstar'を追加するのを忘れました。私はそれが問題ではないと確信しています。 – ryeballar

+0

次に、別のオプションを有効にする必要があります。おそらくextglob? –

答えて

5

globstar**パターンを可能にします。 extglobオプションを使用すると、!(...)が許可されます。あなたの対話型シェルのどこかですでに有効になっています(.bashrcの中におそらく入力済みのshopt -s extglobでしょう)。ただし、この設定はスクリプトを開始するシェルから継承されないため、スクリプトで明示的に有効にする必要があります。 (それは第二の一方は冗長であり、単に二つの隣接* Sとして扱われるためさておき、globstar無し**に構文エラーが発生しないように。)

#!/usr/bin/env bash 

shopt -s globstar extglob 
ls ./HTML/**/!(*.bundle).js 

+0

どうもありがとうございます。私は 'extglob'がすでに有効になっていると思っています。私は本質的にそれを可能にする '.bashrc'のどこかにスクリプトを持っていたと思います。 – ryeballar

+2

ここには関係ないが、 'bash' 4.1からは、デフォルトで' extglob'を有効にするコンパイル時のオプションがあります。 '[[...]]' == 'と'!= 'です。 – chepner

関連する問題