回答編集履歴

3 誤記 ssty -> stty

KSwordOfHaste

KSwordOfHaste score 17932

2019/05/25 18:50  投稿

追記:Takahito_Ogawaさんの回答を拝見しました。
こんなことができるんですね!
自分の回答は取り消します( ;
---
こうしたもののを調べたことがないので外してたらスミマセン
bashがコマンドを入力する際にはコマンド名の補完やコマンド引数のパス名の補完をやってくれますが、readでは行われない気がします。それはreadの目的が「コマンドやファイル名を入力するものではなく」「文字列を入力するためのもの」だからだと思います。つまり目的が違う機能なのだと思います。
bashのmanなどみるとreadはCのライブラリーであるRaedlineを使っているらしいことが伺えます。もしお望みのことをするコマンドがどこかにないとすると(あるのかも知れませんが、自分は知らないです)ttyのモードをcooked->rawにした上で1文字ずつ処理をプログラムが必要になると思います。
(1) sstyでttyモードを変更し、補完をshellやperlで書く
(1) sttyでttyモードを変更し、補完をshellやperlで書く
(2) linuxのtty設定用関数でttyモードを変更し、Cで補完処理を書く
(3) C以外の何かの言語を使って書く
(4) emacsなどに慣れているならemacsでスクリプト全体を書いてしまう
 たしかemacsにはファイル名を補完してくれるemacs-lispの関数があった気がします。
といった方法が考えらえますが(2)(3)を想定し「linux tty 文字単位 入力」で検索して少し調べてみたところ以下のようなページがヒットしました。
C
[http://www.darkhorse.mydns.jp/blog/getch_utf8](http://www.darkhorse.mydns.jp/blog/getch_utf8)
Ruby
[https://qiita.com/ksss/items/9c8a237f452cd8aa7c11](https://qiita.com/ksss/items/9c8a237f452cd8aa7c11)
自前で作るのは少々めんどうそうなのでどこかにファイル名補間をしてくれるようなコマンドがあればよいのですが、残念ながら自分は知りません。
2 敬称漏れ!

KSwordOfHaste

KSwordOfHaste score 17932

2019/05/25 18:49  投稿

こんなことができるんですね!
自分の回答は取り消します( ;
---
こうしたもののを調べたことがないので外してたらスミマセン
bashがコマンドを入力する際にはコマンド名の補完やコマンド引数のパス名の補完をやってくれますが、readでは行われない気がします。それはreadの目的が「コマンドやファイル名を入力するものではなく」「文字列を入力するためのもの」だからだと思います。つまり目的が違う機能なのだと思います。
bashのmanなどみるとreadはCのライブラリーであるRaedlineを使っているらしいことが伺えます。もしお望みのことをするコマンドがどこかにないとすると(あるのかも知れませんが、自分は知らないです)ttyのモードをcooked->rawにした上で1文字ずつ処理をプログラムが必要になると思います。
(1) sstyでttyモードを変更し、補完をshellやperlで書く
(2) linuxのtty設定用関数でttyモードを変更し、Cで補完処理を書く
(3) C以外の何かの言語を使って書く
(4) emacsなどに慣れているならemacsでスクリプト全体を書いてしまう
 たしかemacsにはファイル名を補完してくれるemacs-lispの関数があった気がします。
といった方法が考えらえますが(2)(3)を想定し「linux tty 文字単位 入力」で検索して少し調べてみたところ以下のようなページがヒットしました。
C
[http://www.darkhorse.mydns.jp/blog/getch_utf8](http://www.darkhorse.mydns.jp/blog/getch_utf8)
Ruby
[https://qiita.com/ksss/items/9c8a237f452cd8aa7c11](https://qiita.com/ksss/items/9c8a237f452cd8aa7c11)
自前で作るのは少々めんどうそうなのでどこかにファイル名補間をしてくれるようなコマンドがあればよいのですが、残念ながら自分は知りません。
1 追記

KSwordOfHaste

KSwordOfHaste score 17932

2017/11/18 23:06  投稿

追記:Takahito_Ogawaの回答を拝見しました。  
こんなことができるんですね!  
自分の回答は取り消します( ;  
 
---  
こうしたもののを調べたことがないので外してたらスミマセン
bashがコマンドを入力する際にはコマンド名の補完やコマンド引数のパス名の補完をやってくれますが、readでは行われない気がします。それはreadの目的が「コマンドやファイル名を入力するものではなく」「文字列を入力するためのもの」だからだと思います。つまり目的が違う機能なのだと思います。
bashのmanなどみるとreadはCのライブラリーであるRaedlineを使っているらしいことが伺えます。もしお望みのことをするコマンドがどこかにないとすると(あるのかも知れませんが、自分は知らないです)ttyのモードをcooked->rawにした上で1文字ずつ処理をプログラムが必要になると思います。
(1) sstyでttyモードを変更し、補完をshellやperlで書く
(2) linuxのtty設定用関数でttyモードを変更し、Cで補完処理を書く
(3) C以外の何かの言語を使って書く
(4) emacsなどに慣れているならemacsでスクリプト全体を書いてしまう
 たしかemacsにはファイル名を補完してくれるemacs-lispの関数があった気がします。
といった方法が考えらえますが(2)(3)を想定し「linux tty 文字単位 入力」で検索して少し調べてみたところ以下のようなページがヒットしました。
C
[http://www.darkhorse.mydns.jp/blog/getch_utf8](http://www.darkhorse.mydns.jp/blog/getch_utf8)
Ruby
[https://qiita.com/ksss/items/9c8a237f452cd8aa7c11](https://qiita.com/ksss/items/9c8a237f452cd8aa7c11)
自前で作るのは少々めんどうそうなのでどこかにファイル名補間をしてくれるようなコマンドがあればよいのですが、残念ながら自分は知りません。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る