• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Emacsのシェルモードでワイルドカードが使えない)

Emacsのシェルモードでワイルドカードが使えない

このQ&Aのポイント
  • Emacsのシェルモードで、bashで使えるワイルドカードが使えないと困っています。
  • 具体的には、?(pattern)、*(pattern)、+(pattern)、!(pattern)のワイルドカードが使えません。
  • この問題を解決する方法をご存知の方がいらっしゃれば、情報を提供していただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これらは、標準のsh等にはなく、bashで拡張されたものです。 となると、なんかのオプションで有効/無効を切り替えるのでは?と予想できます。 そこでbashのマニュアルを読むと http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html > パス名展開 > 組み込みコマンドの shopt を使ってシェルのオプション extglob が有効にされていると、 拡張パターンマッチング演算子がいくつか認識されるようになります。 > ?(pattern-list) 与えられたパターンが 0 回または 1 回現われるとマッチします。 ... ktermでの利用時は extglobが設定されていると思われます。 ・ktermで使用しているbashはCygwinのbashなのでしょうか? MinGWのbashなら、Cygwinとホームディレクトリが違うので.bashrcも違います ・setopt extglobはどこに記述されているのでしょうか? shell-modeはログインシェルではないので、.bash_profileや.profileは実行しません

MetalLover
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Emacs上でmoreやlessが機能しない

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacsのシェルモードでは、cygwinのbashを使っています。 このシェルモードで、ファイルをmoreやlessといったコマンドで表示しようとしても、 1ページずつ表示されず、catコマンドと同じように、一気に表示されます。 Emacsのシェルモードでは、moreやlessの1ページずつ表示する機能は、使えないのでしょうか? 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。

  • Emacsのシェルでpythonの対話モード…

    windows10上でEmacs26.3を使っています。 Emacsのシェル上でpythonの対話環境を開こうとしてもできません。 Emacs上でM-x shellなりM-x eshellなりM-x powershellなりでシェルを開いて、 画面が C:\Users\Username> 等となっている状態で、 C:\User\Username>python と打ってエンターを押しても、ただ改行されるだけで起動しません。 python以外でも、juliaやstack ghci(haskellの対話モード起動する)でも変な挙動になります。 普通のコマンド類(cdやdirなど)は問題なく使えます。 Emacs上ではなく普通にコマンドプロンプトやpowershellでなら普通にpython対話モードを起動できます。 どうすれば上手く起動するでしょうか。

  • Emacsのshellモードに関する質問

    Emacsのshellモードにに関する質問 こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 shellモードについて、2つ質問させて下さい。 ・cdといった、bashの組み込みコマンドが、日本語を対処できない。 shellモードのシェルとして、bashを使った場合、cdコマンドの引数に、 日本語を含むディレクトリを指定すると、 No such file or directoryと表示されて、目的のディレクトリに移動できません。 具体的には、以下のような感じです。 ------------------------------------------------------------ Kei-Valuestar@Kei:~/Make_Tests_for_C_Files $ls 2つの関数、1つのヘッダ make_01 make_02 make_03 make_04 make_05 make_06 make_07 make_08 make_09 デフォルトシンボル、組み込み関数一覧.url トリビアなmakefile入門.url Kei-Valuestar@Kei:~/Make_Tests_for_C_Files $cd 2つの関数、1つのヘッダ/ bash: cd: 2つの関数、1つのヘッダ/: No such file or directory ------------------------------------------------------------ 日本語環境は整えてあるので、lsコマンドでは、日本語ファイルがきちんと表示されていますし、日本語ファイル名の補完も上手く行くので、bashの組み込みコマンドである、 cdだけが、日本語を適切に扱えないのだと思います。 日本語も扱える、cdコマンド(exeファイル)は、どこかで配布されてないのでしょうか? ・moreやlessといったコマンドが、きちんと動作しない。 shellモードでは、コマンドプロンプトや、cygwinのbashを使うのですが、 どちらを使った場合でも、moreやlessといった、ファイルの内容をページごとに表示する コマンドを実行した時に1ページづつ表示されず、catコマンドを実行した場合と同じように、ファイルの内容が全て表示されてしまいます。 何か対処法は無いでしょうか? 以上の件で、何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • Emacs端末上で、Cプログラムが適切に動作しない

    こんにちは。 OSは現在、64bit版のWindows7を使っており、Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacsのシェルモード(「M-x shell」で起動するモード)では、シェルとしてCygwinに付属しているbashを使い、C言語のソースをコンパイル(あるいはビルド)する場合は、Cygwinのgccを使おうと考えています。 ところが、ビルドしたプログラムをEmacsのシェルモードで実行すると、上手く起動しないので困っています。 具体的には、以下の通りです。 まず、テスト用のCソースファイルとして、以下のような、test.cを作成しました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { int num=2; printf"Enter integer: "); scanf("%d", &num); printf("Number enterd: %d", num); } ------------------------------------------------------------ これをシェルモードで、gccを使ってビルドし、作成されたa.exeを実行すると、以下のようになりました。 [TERM=emacs] ------------------------------------------------------------ Kei-Lavie@Kei:~/C_Programs $ gcc test2.c Kei-Lavie@Kei:~/C_Programs $ ./a.exe 20 Enter integer: Number enterd: 20 ------------------------------------------------------------ 作成された実行ファイルのa.exeを実行すると、まず Enter integer: と表示されるはずなのですが、それが表示されず、止まります。 そこで、整数として適当に20を入力してみると、 Enter integer: Number enterd: 20 と出力されました。 どうやら、必要な入力操作が終わってから、全ての出力操作が行われるようです。 その事を確認するために、先ほどのtest.cのmain関数を、以下のように変更し、数値を入力する場面を2箇所設けました。 ------------------------------------------------------------ int main(void) { int i=2; double d=0.1; printf("Enter integer: "); scanf("%d", &i); printf("Integer enterd: %d", i); printf("\n"); printf("Enter number: "); scanf("%lf", &d); printf("Number enterd: %f", d); } ------------------------------------------------------------ これをシェルモードで、gccを使ってビルドし、作成されたa.exeを実行すると、以下のようになりました。 [TERM=emacs] ------------------------------------------------------------ Kei-Lavie@Kei:~/C_Programs $ gcc test.c Kei-Lavie@Kei:~/C_Programs $ ./a.exe 20 0.123456789 Enter integer: Integer entered: 20 Enter number: Number entered: 0.123457 ------------------------------------------------------------ 作成された実行ファイルのa.exeを実行すると、まず Enter integer: と表示されるはずなのですが、それが表示されず、止まります。 そこで、整数として20を入力してみても止まったままです。 そして浮動小数点数として0.123456789を入力すると、 Enter integer: Integer entered: 20 Enter number: Number entered: 0.123457 と出力されました。 やはり、必要な全ての入力操作が終わってから、最後に全ての出力操作が行われるようです。 しかし、作成されたa.exeを、ktermといった端末上で実行すると、プログラムは以下のように適切に動作します。 [TERM=kterm] ------------------------------------------------------------ Kei@Kei-Lavie /cygdrive/c/Emacs_for_Windows/C_Programs $ ./a.exe Enter integer: 20 Integer entered: 20 Enter number: 0.123456789 Number entered: 0.123457 ------------------------------------------------------------ つまり、上記のように、作成されたプログラムが適切に動作しない問題は、Emacs端末に固有のもののようです。 上記のような問題を解決しようといろいろ試していると、kterm上で、a.exeの出力を、catやnkfといった出力コマンドにパイプすると、上記のような問題と同じ動作をしました。 具体的には以下の通りです。 [TERM=kterm] ------------------------------------------------------------ Kei@Kei-Lavie /cygdrive/c/Emacs_for_Windows/C_Programs $ ./a.exe |nkf 20 0.123456789 Enter integer: Integer entered: 20 Enter number: Number entered: 0.123457 ------------------------------------------------------------ 以上のような事から、どうやらEmacsのシェルモードでは、プログラムの出力を、catなどの出力コマンドにパイプしているのだと予想されます。 そこで、シェルモードの動作を決めると思われる、shell.el(あるいはshell.elc)やcomint.el(あるいはcomint.el)の内容を見てみたのですが、複雑すぎて、どの部分がEmacs端末上での出力に関与しているのかが分かりませんでした。 どうしてもEmacsのシェルモードを使って、C言語での開発を行いたいと思っていますので、 以上の件について、同じような経験をされた方、あるいは、何か解決策としてのご提案がある方は、是非、投稿をお願い致します。 自力では解決できそうにないので、どうか力をお貸しください。 よろしくお願い致します。

  • シェルスクリプトで配列が使えない

    シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、 以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。 環境はubuntu 10.10、 GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu) です。 ---------------------- #!/bin/sh list=(`ls`) echo ${list[0]} ---------------------- 3:Syntax error: "(" unexpected

  • Emacs-Lispモードで、式が返す値を全て表示

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacs-Lispモードで、バッファに記述されている式を評価した時、その式が返す値が、ミニバッファに出力されます。 ところが、式が返す値が長すぎると、途中までしか表示されません。 例えば自分の環境だと、 (symbol-value 'load-path) という式を評価すると、ミニバッファには (nil "~" "~/My_Lisp_Programs" "c:/Emacs_for_Windows/emacs-23.4" "C:/Emacs_for_Windows/emacs-23.4/site-lisp" "C:/Emacs_for_Windows/emacs-23.4/../site-lisp" "C:/Emacs_for_Windows/emacs-23.4/lisp" "c:/Emacs_for_Windows/emacs-23.4/lisp/url" "c:/Emacs_for_Windows/emacs-23.4/lisp/textmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/progmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/play" "c:/Emacs_for_Windows/emacs-23.4/lisp/org" ...) という文字列が出力され、...以降が表示されません。 どうすれば、Emacs-Lispモードで、式が返す値を全て表示する事ができるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • shシェル:case文のワイルドカードのエスケープについて(再)

    shシェルスクリプトのcase 文のワイルドカードのエスケープについて質問させて下さい。 (初め「プログラミング > その他(プログラミング)」で質問しましたが、 プログラムと言うよりもシェルの話しなのでこちらに移しました。) #!/bin/sh case "$i" in [Yy]"*" ) echo "Y(literary *) or y(literary *)" ;; [Yy]* ) echo "Y(wild-card *) or y(wild-card *)" ;; "[Yy]*" ) echo "(literary [Yy]*)" ;; "[Yy]"* ) echo "(literary [Yy])(wild-card *)" ;; esac とした場合、"$i" の内容に関し、 1番目は、Yまたは yの後に文字通り* 2番目は、Yまたは yで始まる任意の文字列 3番目は、文字通り [Yy]* 4番目は、文字通り [Yy] で始まる任意の文字列 の場合分けという理解でよろしいでしょうか。 私のシステム GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu) で走らせると、上のように振舞うように思うのですが、 現在読んでいる ブルース・ブリン 「入門UNIXシェルプログラミング 改訂第2版」(ソフトバンク) 第5刷、p34 の説明で "[Yy]" ) の説明が 「これはYあるいはyに限る」 "[Yy]*" ) は 「これはY* あるいは y* と言う文字に限る」 "[Yy]"* ) は 「Y か y で始まる文字列 」 と説明されているので、疑問に思いました。 私が正しく理解していれば、上の説明は誤りで、上の3つの説明に合うのは、 それぞれ、 [Yy] ) [Yy]"*" ) [Yy]* ) であるはずなのですが、いかがでしょう。 この本はシェルスクリプトの良書としてよく読まれているようで、 しかも第2版でこんな間違いをするかなぁ?とも思いまして。 ひょっとして私がなにか誤解していますでしょうか? よろしくお願いします。

  • シェルスクリプト(if文)

    bashにてシェルスクリプトを作成しています。 XXXX_111122222333_YYYYMMDD 111122222333 といった2パターンのファイル名から、「111122222333」の部分を取得したいのですが、if文の条件式で悩んでいます。 if [ expr length ${p9} -gt 13 ] then a=`echo $p9|cut -c 6-9` b=`echo $p9|cut -c 10-14` c=`echo $p9|cut -c 15-18` else a=`echo $p9|cut -c 1-4` b=`echo $p9|cut -c 5-9` c=`echo $p9|cut -c 10-13` fi これで実行すると too many arguments というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • シェルスクリプトに関する問題です。(シェルの条件式)

    先輩達、こんにちは。初めて質問をしますので、質問の仕方があまり上手ではありませんがよろしくお願いします。 今、Fadore core2を使っていますが、シェルの条件式を練習しています。 #!/bin/bash # This program is used to study if than echo "Press y to continue" read yn if [ "$yn"="y" ]; than echo "script is running..." else echo "STOP!" fi を練習しましたが、実行したら ⇒syntax error near unexpected token `else' のエラーメッセージがありました。 問題点はよくわからないですが、何の指令をしていないと思います。あまりにも簡単の問題ですが、ヒントだけでもいいですので、よろしくお願いします。

このQ&Aのポイント
  • 三菱Q03UDVCPUからパトライトNHBシリーズを制御(点灯・ブザー)できるかについて教えてください。
  • Qシリーズでこのコマンドができるかどうかでも構いません。
  • 明日三菱へ問い合わせ予定ですが、早く回答いただけると助かります。
回答を見る

専門家に質問してみよう