質問: ### 前提・実現したいこと 環境 VMWare上のCentOS7.3 r1611 GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu) readコマンドでディレクトリパスを入力させる際 タブキーで入力補完させたい。 ### 該当のソースコード ``` read -p "ディレクトリを指定してください。:" tempDirPath ``` ### 試したこと readコマンドのオプションや、completeコマンドで出来るのかと試してみたのですが タブキーを押しても、タブコードが入力されてしまい、補完できませんでした。 どのような情報でも結構ですので、よろしくお願いします。
回答: 追記:Takahito_Ogawaさんの回答を拝見しました。 こんなことができるんですね! 自分の回答は取り消します( ; こうしたもののを調べたことがないので外してたらスミマセン bashがコマンドを入力する際にはコマンド名の補完やコマンド引数のパス名の補完をやってくれますが、readでは行われない気がします。それはreadの目的が「コマンドやファイル名を入力するものではなく」「文字列を入力するためのもの」だからだと思います。つまり目的が違う機能なのだと思います。 bashのmanなどみるとreadはCのライブラリーであるRaedlineを使っているらしいことが伺えます。もしお望みのことをするコマンドがどこかにないとすると(あるのかも知れませんが、自分は知らないです)ttyのモードをcooked->rawにした上で1文字ずつ処理をプログラムが必要になると思います。 (1) sttyでttyモードを変更し、補完をshellやperlで書く (2) linuxのtty設定用関数でttyモードを変更し、Cで補完処理を書く (3) C以外の何かの言語を使って書く (4) emacsなどに慣れているならemacsでスクリプト全体を書いてしまう たしかemacsにはファイル名を補完してくれるemacs-lispの関数があった気がします。 といった方法が考えらえますが(2)(3)を想定し「linux tty 文字単位 入力」で検索して少し調べてみたところ以下のようなページがヒットしました。 C Ruby 自前で作るのは少々めんどうそうなのでどこかにファイル名補間をしてくれるようなコマンドがあればよいのですが、残念ながら自分は知りません。