バグ #889
closedmikutter.rb のshebangが /usr/bin/ruby になっており、他の場所にrubyがあると落ちる
Description
mikutter.rbのshebang( http://dev.mikutter.hachune.net/projects/mikutter/repository/revisions/master/entry/mikutter.rb#L1 )がハードコードになっている事により、Rubyをビルドしてインストールした時などに起動に失敗するようです。
`/usr/bin/env ruby` に変更すればenvコマンドからどこかにインストールされているRubyを探索してくれそうですが、こうしていない理由などはあったりしますか?
(ちなみにこれはdocker_mikutter( https://github.com/Na0ki/docker_mikutter )を触っていた時に気づいたものです)
Updated by toshi_a 初音 about 8 years ago
俺もこうなっている理由が分からなかったので追加された当時のコミットを見てみました(995c7507c1ac8e337565305420b3ca4f2e2a7a46)。コミットコメントがないのでわかりません。この粒度でコミットされてたら残っててもどっちみち役に立たなさそう。
たしか /usr/bin/env は、その場所にenvがあるとは限らないのでよくない、という話をきいたことがあったのでちょっと調べてみたところ、Rubyではこう書く場合もあるようです。
http://docs.ruby-lang.org/ja/latest/doc/spec=2frubycmd.html
#!/bin/sh
exec ruby -x "$0" "$@"
#!ruby
p ARGV
puts "Hello, World!"
これはこれでrubyにPATHが通っていることを前提にしているのであんまり良くないように見える。何年か前にこの書き方を見てからこれが最強なんだと思ってたけど調べれば調べるほどわからなくなってきた。どうせ変更するのであれば現代における一番いい方法を使いたいが、答えのない自転車置き場の議論という気もする。
Updated by waita Tachibana about 8 years ago
env コマンド使っても結局PATHを通っている事が前提になるし、Rubyドキュメントに記載されている起動方法でも問題無い気がしますが、これだと mikutter.sh になってしまうんですかね?
Updated by toshi_a 初音 about 8 years ago
これだと mikutter.sh になってしまうんですかね?
起動ファイルのmikutter.rbをリネームする必要があるのかということですね。それは必要なくて、 ./mikutter.rb という名前でもshebangによってshell scriptとして実行されるだけです。
rubyインタプリタが、渡されたファイルに #!ruby と書かれた行があれば、その行以降のみをパースするという性質を利用しているとのことです。
- envが存在しない環境がある
- envがどこにあるかわからない
- shが存在しない環境があるのでは?(ぐぐっても言及が見当たらない)
ので、私の提案した方法のほうが良いような気はしています。
Updated by waita Tachibana about 8 years ago
rubyインタプリタが、渡されたファイルに #!ruby と書かれた行があれば、その行以降のみをパースするという性質を利用しているとのことです。
なるほど理解しました。
shが存在しない環境があるのでは?(ぐぐっても言及が見当たらない)
私も /bin/sh にない環境はあまり聞かないので #889-1 の手法で問題ないように思えます。
強いて言うならばshの$PATHにrubyへのPATHが通ってないようなことが挙げられますが、これはまだ(環境変数だし)回避しやすい物だと思われます。
Updated by toshi_a 初音 almost 8 years ago
- Assignee set to waita Tachibana
変更してみました。特に問題はないように思えますが。
3.4から分岐していますが、前と全く同じ動きをするわけではないし、前の実装が間違っていたわけでもないので、3.5からの変更としようかなぁと思っています。
Updated by waita Tachibana almost 8 years ago
私の方でも試してみましたが特に問題は無さそうです。
3.5からの変更としようかなぁと思っています。
はい、それで問題無いかと!
Updated by toshi_a 初音 almost 8 years ago
- Status changed from 新規 to 終了
- Target version changed from 3.4 to 3.5
develop にマージしました