天使と悪魔選手権

こんにちは。

Emacsは、Gnu Emacs for Windows 23.4 を使っています。
シェルモードのシェルには、cygwinのbashを使っているのですが、
bashで使えるはずのワイルドカードが、いくつか使えなくて、困っています。
bashのワイルドカードで、使えないものは、以下の通りです。

?(pattern) 与えられたパターンが 0 回または 1 回現われるとマッチします。
*(pattern) 与えられたパターンが 0 回以上現われるとマッチします。
+(pattern) 与えられたパターンが 1 回以上現われるとマッチします。
!(pattern) 与えられたパターンいずれにも含まれないもの全てにマッチします。

これらのワイルドカードは、ktermなどの上では、きちんと使えます。
例えばkterm上で、
echo !(*.c)
と打てば、.cで終わらないファイル名を持つ、ファイルの一覧が表示されます。

ところが、Emacsのシェルモードで、同じように
echo !(*.c)
と打つと、
emacs "bash: !: event not found"
と表示されます。
同様に、
echo *(.c)
と打った場合、
bash: 期待してない token `(' のあたりにシンタックスエラー
と表示されます。

どうすれば、こういったワイルドカードを、シェルモードで使う事ができるのでしょうか?

何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。
では、よろしくお願い致します。

A 回答 (1件)

これらは、標準のsh等にはなく、bashで拡張されたものです。


となると、なんかのオプションで有効/無効を切り替えるのでは?と予想できます。

そこでbashのマニュアルを読むと
http://linuxjm.sourceforge.jp/html/GNU_bash/man1 …
> パス名展開
> 組み込みコマンドの shopt を使ってシェルのオプション extglob が有効にされていると、 拡張パターンマッチング演算子がいくつか認識されるようになります。
> ?(pattern-list) 与えられたパターンが 0 回または 1 回現われるとマッチします。
...


ktermでの利用時は extglobが設定されていると思われます。
・ktermで使用しているbashはCygwinのbashなのでしょうか?
MinGWのbashなら、Cygwinとホームディレクトリが違うので.bashrcも違います
・setopt extglobはどこに記述されているのでしょうか?
shell-modeはログインシェルではないので、.bash_profileや.profileは実行しません
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
説明を読ませていただき、bashのマニュアルをよーく読んだ後、
setopt -s extglob で、使用できるようになりました。
ありがとうございました。

お礼日時:2012/07/17 00:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!