バグ #889
完了
俺もこうなっている理由が分からなかったので追加された当時のコミットを見てみました(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が通っていることを前提にしているのであんまり良くないように見える。何年か前にこの書き方を見てからこれが最強なんだと思ってたけど調べれば調べるほどわからなくなってきた。どうせ変更するのであれば現代における一番いい方法を使いたいが、答えのない自転車置き場の議論という気もする。
env コマンド使っても結局PATHを通っている事が前提になるし、Rubyドキュメントに記載されている起動方法でも問題無い気がしますが、これだと mikutter.sh になってしまうんですかね?
これだと mikutter.sh になってしまうんですかね?
起動ファイルのmikutter.rbをリネームする必要があるのかということですね。それは必要なくて、 ./mikutter.rb という名前でもshebangによってshell scriptとして実行されるだけです。
rubyインタプリタが、渡されたファイルに #!ruby と書かれた行があれば、その行以降のみをパースするという性質を利用しているとのことです。
env
- envが存在しない環境がある
- envがどこにあるかわからない
sh
- shが存在しない環境があるのでは?(ぐぐっても言及が見当たらない)
ので、私の提案した方法のほうが良いような気はしています。
rubyインタプリタが、渡されたファイルに #!ruby と書かれた行があれば、その行以降のみをパースするという性質を利用しているとのことです。
なるほど理解しました。
shが存在しない環境があるのでは?(ぐぐっても言及が見当たらない)
私も /bin/sh にない環境はあまり聞かないので #889-1 の手法で問題ないように思えます。
強いて言うならばshの$PATHにrubyへのPATHが通ってないようなことが挙げられますが、これはまだ(環境変数だし)回避しやすい物だと思われます。
仮に #889-1 で実装してみて、どういう影響があるか調べてみます。
- 担当者 を waita Tachibana にセット
変更してみました。特に問題はないように思えますが。
3.4から分岐していますが、前と全く同じ動きをするわけではないし、前の実装が間違っていたわけでもないので、3.5からの変更としようかなぁと思っています。
私の方でも試してみましたが特に問題は無さそうです。
3.5からの変更としようかなぁと思っています。
はい、それで問題無いかと!
- ステータス を 新規 から 終了 に変更
- 対象バージョン を 3.4 から 3.5 に変更
他の形式にエクスポート: Atom
PDF