[ruby-list:51008] Readline.readline の動作について

浦島投稿です。下のソースの動作がRubyのバージョンによって異なっているようで, 解決できればと思ってお尋ねします。 #! /usr/bin/env ruby require "readline" hist = Readline::HISTORY items = ["aaa","bbb","ccc","dddd","ee"] items.each {|item| hist << item} puts "項目を選んでEnter" hist.each{|e| puts e } selected = Readline.readline("> ", true) p selected ruby --version ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux] こちらでは,実行すると 項目を選んでEnter aaa bbb ccc dddd ee
dddd "dddd"
のように,Ctrl-P などでヒストリの配列 items を遡って selected に取り込めます。 これを便利に活用していました。 ところが, ruby --version ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu] だと, 項目を選んでEnter aaa bbb ccc dddd ee
のようにプロンプトを出してくれますが,配列の要素を拾ってくれず,見ながら直接入力して やるしかありません。 Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 でできたことを3.0で可能にする方法 がないのかと気になっています。ご存知の方がおられたら教えていただけるとうれしいです。 小波秀雄

小川と申します。
Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 でできたことを3.0で可能にする方法 がないのかと気になっています。ご存知の方がおられたら教えていただけるとうれしいです。
私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく動作し ました。なので、仕様変更というわけではないと思います。 原因はわかりませんが、システムの libreadline.so に問題がある可能性はある のかなと思いました。 -- 小川建一 mailto:kenichi@ice.email.ne.jp ++

小川さん レポートをありがとうございます。問題の切り分けができて助かります。 OSはどちらも Ubuntu 22.04.3 LTS ですので謎が深まりますが, 仕事が詰まっていますので,時間ができたら調べてみることにします。 小波秀雄 On 2023/10/30 11:00, OGAWA KenIchi via ruby-list wrote:
小川と申します。
Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 でできたことを3.0で可能にする方法 がないのかと気になっています。ご存知の方がおられたら教えていただけるとうれしいです。 私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく動作し ました。なので、仕様変更というわけではないと思います。
原因はわかりませんが、システムの libreadline.so に問題がある可能性はある のかなと思いました。

こんにちは。興味があったので試してみました。別OSですが、AlmaLinux 9.2だとRuby 3.0.4でreadlineが使えるようでした。 ご参考までにお送りします。 $ cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod) $ ruby -v -r readline -e 'puts "readline #{Readline::VERSION}"' ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux] readline 8.1 $ ruby readline-test.rb 項目を選んでEnter aaa bbb ccc dddd ee
dddd "dddd"
2023年10月30日(月) 11:35 konami via ruby-list <ruby-list@ml.ruby-lang.org>:
小川さん
レポートをありがとうございます。問題の切り分けができて助かります。
OSはどちらも Ubuntu 22.04.3 LTS ですので謎が深まりますが, 仕事が詰まっていますので,時間ができたら調べてみることにします。
小波秀雄
On 2023/10/30 11:00, OGAWA KenIchi via ruby-list wrote:
小川と申します。
Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 でできたことを3.0で可能にする方法 がないのかと気になっています。ご存知の方がおられたら教えていただけるとうれしいです。 私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく動作し ました。なので、仕様変更というわけではないと思います。
原因はわかりませんが、システムの libreadline.so に問題がある可能性はある のかなと思いました。

こんにちは、阿部といいます。 昨日メールを登録していないアカウントから送信してしまい弾かれて しまったようです。重複して受け取った方がいれば申し訳ありません。 Ubuntu 22.04のruby packageはibeditとリンクしていたので、 ruby-3.0.6.tar.gz から --enable-libedit付きでコンパイルしてみた ところ再現しました。 Ubuntu 23.10のruby packageもlibeditを使用していますが、再現しません。 ruby-3.2.2.tar.gz の ext/readline/readline.c と比較すると prepare_readline(); 行の有無だけが違うようでしたので原因は 3.0系のコードが古いことだろうと思います。 Ubuntu 22.04を使う前提であれば、snapで配布されているrubyをインストール (snap install --classic ruby) して、/snap/bin/ruby を使うのが良いかもしれません。 On 2023/10/31 9:20, 大城 尚紀 via ruby-list wrote:
こんにちは。興味があったので試してみました。別OSですが、AlmaLinux 9.2だ とRuby 3.0.4でreadlineが使えるようでした。
ご参考までにお送りします。
$ cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod) $ ruby -v -r readline -e 'puts "readline #{Readline::VERSION}"' ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux] readline 8.1
$ ruby readline-test.rb 項目を選んでEnter aaa bbb ccc dddd ee
dddd "dddd"
2023年10月30日(月) 11:35 konami via ruby-list <ruby-list@ml.ruby-lang.org <mailto:ruby-list@ml.ruby-lang.org>>:
小川さん
レポートをありがとうございます。問題の切り分けができて助かります。
OSはどちらも Ubuntu 22.04.3 LTS ですので謎が深まりますが, 仕事が詰まっていますので,時間ができたら調べてみることにします。
小波秀雄
On 2023/10/30 11:00, OGAWA KenIchi via ruby-list wrote: > 小川と申します。 > >> Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 >> でできたことを3.0で可能にする方法 >> がないのかと気になっています。ご存知の方がおられたら教えていただ けるとうれしいです。 > 私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく 動作し > ました。なので、仕様変更というわけではないと思います。 > > 原因はわかりませんが、システムの libreadline.so に問題がある可能 性はある > のかなと思いました。 >
-- ---- Yasuhiro ABE e-mail: yasu@yasundial.org, yadiary@gmail.com twitter: http://twitter.com/YasuhiroABE

[like] 前川 享仁 reacted to your message: ________________________________ From: Yasuhiro ABE via ruby-list <ruby-list@ml.ruby-lang.org> Sent: Tuesday, October 31, 2023 12:43:21 AM To: 大城 尚紀 via ruby-list <ruby-list@ml.ruby-lang.org> Cc: Yasuhiro ABE <yasu@yasundial.org> Subject: [ruby-list:51012] Re: Readline.readline の動作について こんにちは、阿部といいます。 昨日メールを登録していないアカウントから送信してしまい弾かれて しまったようです。重複して受け取った方がいれば申し訳ありません。 Ubuntu 22.04のruby packageはibeditとリンクしていたので、 ruby-3.0.6.tar.gz から --enable-libedit付きでコンパイルしてみた ところ再現しました。 Ubuntu 23.10のruby packageもlibeditを使用していますが、再現しません。 ruby-3.2.2.tar.gz の ext/readline/readline.c と比較すると prepare_readline(); 行の有無だけが違うようでしたので原因は 3.0系のコードが古いことだろうと思います。 Ubuntu 22.04を使う前提であれば、snapで配布されているrubyをインストール (snap install --classic ruby) して、/snap/bin/ruby を使うのが良いかもしれません。 On 2023/10/31 9:20, 大城 尚紀 via ruby-list wrote:
こんにちは。興味があったので試してみました。別OSですが、AlmaLinux 9.2だ とRuby 3.0.4でreadlineが使えるようでした。
ご参考までにお送りします。
$ cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod) $ ruby -v -r readline -e 'puts "readline #{Readline::VERSION}"' ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux] readline 8.1
$ ruby readline-test.rb 項目を選んでEnter aaa bbb ccc dddd ee
dddd "dddd"
2023年10月30日(月) 11:35 konami via ruby-list <ruby-list@ml.ruby-lang.org <mailto:ruby-list@ml.ruby-lang.org>>:
小川さん
レポートをありがとうございます。問題の切り分けができて助かります。
OSはどちらも Ubuntu 22.04.3 LTS ですので謎が深まりますが, 仕事が詰まっていますので,時間ができたら調べてみることにします。
小波秀雄
On 2023/10/30 11:00, OGAWA KenIchi via ruby-list wrote: > 小川と申します。 > >> Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 >> でできたことを3.0で可能にする方法 >> がないのかと気になっています。ご存知の方がおられたら教えていただ けるとうれしいです。 > 私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく 動作し > ました。なので、仕様変更というわけではないと思います。 > > 原因はわかりませんが、システムの libreadline.so に問題がある可能 性はある > のかなと思いました。 >
-- ---- Yasuhiro ABE e-mail: yasu@yasundial.org, yadiary@gmail.com twitter: http://twitter.com/YasuhiroABE

前川さん、大城さん、阿部さん 沢山の親切な情報をありがとうございました。おかげさまで問題をフィックスできました。 最初に rbenvで別のRubyをインストールしようとしたら、謎のエラーでストップ cannot load such file -- psych こいつに悩まされました。本家から Ruby のtarballを落としてビルドしようとしても 同様です。解決は断念。 そこで、現行の 3.0.2と rbenvを切ってしまうことにしました。 sudo apt purge ruby rbenv ruby-build rm -rf ~/.rbenv 道具をインストール sudo apt install gcc make sudo apt install libssl-dev zlib1g-dev |gitからrbenvをインストール git clone --depth 1 https://github.com/rbenv/rbenv.git ~/.rbenv 少し作業して rbenvをmake インストールできるバージョンを探す rbenv install --list-all | lv # 3.1.2がいいかな rbenv install 3.1.2 rbenv global 3.1.2 これでちゃんと動くRubyが入手できました。もっとスマートにやれたかも しれません。 小波秀雄 | On 2023/10/31 9:46, 前川 享仁 via ruby-list wrote:
------------------------------------------------------------------------ *From:* Yasuhiro ABE via ruby-list <ruby-list@ml.ruby-lang.org> *Sent:* Tuesday, October 31, 2023 12:43:21 AM *To:* 大城 尚紀 via ruby-list <ruby-list@ml.ruby-lang.org> *Cc:* Yasuhiro ABE <yasu@yasundial.org> *Subject:* [ruby-list:51012] Re: Readline.readline の動作について こんにちは、阿部といいます。
昨日メールを登録していないアカウントから送信してしまい弾かれて しまったようです。重複して受け取った方がいれば申し訳ありません。
Ubuntu 22.04のruby packageはibeditとリンクしていたので、 ruby-3.0.6.tar.gz から --enable-libedit付きでコンパイルしてみた ところ再現しました。
Ubuntu 23.10のruby packageもlibeditを使用していますが、再現しません。
ruby-3.2.2.tar.gz の ext/readline/readline.c と比較すると prepare_readline(); 行の有無だけが違うようでしたので原因は 3.0系のコードが古いことだろうと思います。
Ubuntu 22.04を使う前提であれば、snapで配布されているrubyをインストール (snap install --classic ruby) して、/snap/bin/ruby を使うのが良いかもしれません。
On 2023/10/31 9:20, 大城 尚紀 via ruby-list wrote:
こんにちは。興味があったので試してみました。別OSですが、AlmaLinux 9.2だ とRuby 3.0.4でreadlineが使えるようでした。
ご参考までにお送りします。
$ cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod) $ ruby -v -r readline -e 'puts "readline #{Readline::VERSION}"' ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux] readline 8.1
$ ruby readline-test.rb 項目を選んでEnter aaa bbb ccc dddd ee > dddd "dddd"
2023年10月30日(月) 11:35 konami via ruby-list <ruby-list@ml.ruby-lang.org <mailto:ruby-list@ml.ruby-lang.org <mailto:ruby-list@ml.ruby-lang.org>>>:
小川さん
レポートをありがとうございます。問題の切り分けができて助かります。
OSはどちらも Ubuntu 22.04.3 LTS ですので謎が深まりますが, 仕事が詰まっていますので,時間ができたら調べてみることにします。
小波秀雄
On 2023/10/30 11:00, OGAWA KenIchi via ruby-list wrote: > 小川と申します。 > >> Ruby 2.7 と 3.0 の仕様変更でこうなっているのかどうか。2.7 >> でできたことを3.0で可能にする方法 >> がないのかと気になっています。ご存知の方がおられたら教えていただ けるとうれしいです。 > 私の手元の環境では、Rubyの3.0.2を使って示されていたコードが正しく 動作し > ました。なので、仕様変更というわけではないと思います。 > > 原因はわかりませんが、システムの libreadline.so に問題がある可能 性はある > のかなと思いました。 >
-- ---- Yasuhiro ABE e-mail: yasu@yasundial.org, yadiary@gmail.com twitter: http://twitter.com/YasuhiroABE

小川です。
Ubuntu 22.04のruby packageはibeditとリンクしていたので、 ruby-3.0.6.tar.gz から --enable-libedit付きでコンパイルしてみた ところ再現しました。
Ubuntu 22.04のパッケージ版のRuby 3.0.2を使用したら私の所でも再現しました。 (正しく動作したときに使用していたのは、rbenvを使ってインストールしたRuby 3.0.2です)
ruby-3.2.2.tar.gz の ext/readline/readline.c と比較すると prepare_readline(); 行の有無だけが違うようでしたので原因は 3.0系のコードが古いことだろうと思います。
次のバグへの対処が入っているようですね。 https://bugs.ruby-lang.org/issues/17629 このissueにworkaroundとして書かれているコードを追加すると正しく動くように なりました。 -- 小川建一 mailto:kenichi@ice.email.ne.jp ++
participants (5)
-
konami
-
OGAWA KenIchi
-
Yasuhiro ABE
-
前川 享仁
-
大城 尚紀