awk ファンクラブ (332レス)
awk ファンクラブ http://mao.5ch.net/test/read.cgi/linux/1215431118/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
249: 247 [sage] 2019/12/12(木) 16:49:42.78 ID:Ks56aDFp bash でも出来なくはないと思う。読むだけならいくらでも出来る。 しかし、「残さず食べる」ということを考えると read -n はちょっと… なぜこれを考える必要があるかというと、食べ残しがあるとたとえばシェルの場合なら それをコマンドラインだと思って読んでしまっだりする。 read -n は食べ残しが無かったら入力待ちになってしまうので適していないと思う。 他人に使わせるプログラムなら常に意識しておくべきことかもしれない。 そこで、まだ試してないならこんなことを試してみてほしい。 BEGIN { cmd = "bash -c 'TMOUT=5 ; read -N 8 v ; echo \"$v\" ;'" for( i = 0; i < 8; i++){ while ( 0 < ( cmd | getline)){ print "i=" i ", 0=[" $0 "]" } close( cmd) } } 得られたデータの長さが指定した長さに達していないならタイムアウトで終了した。 つまり、食べ残しは無いということになると思う。 ただし、改行の扱いがめんどくさい。 bash は read で読んだ改行をちゃんと送っているのだが getline が削除してしまう。 そして最後の改行は echo が加えたもので、read で読んだのではない。 awk の方で RS の値を変えることでめんどくささが減る可能性はある。 しかしやはり最終結果だけを 1 行で受け取るほうがいいかもしれない。 もっとも、入力元を共有しているから食べ残しが問題になるのであって 新たに端末エミュレータを起動してその上で実行するのなら問題にならない。 パイプが繋がらないから別の方法で結果を返す必要はあるが、メニューを出して ユーザに選択させるという用途なら悪くない方法かもしれない。 http://mao.5ch.net/test/read.cgi/linux/1215431118/249
259: login:Penguin [sage] 2021/02/19(金) 05:12:44.08 ID:m+sRJxZf >>249 bashはreadline組み込まれてるので使って良いんじゃないかな? あとライン毎にバッファしてるのが問題な気がするから、stdbuf cmdでcmdの参照してるstdlibをすり替えられて、一文字毎にflushする用に出来たりするがどうだろう http://mao.5ch.net/test/read.cgi/linux/1215431118/259
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.633s*