[#49519] OSX ruby-tkのextconf.rb — 天野 竜太郎 <pikara-giresse82@...>

=1B$BE7Ln$H$$$$$^$9!#=1B(B

13 messages 2013/08/01

[#49536] コマンドラインで ruby の変数に値を設定する方法 — 尾川敏也 <ogw@...>

尾川と申します。

31 messages 2013/08/09
[#49537] Re: コマンドラインで ruby の変数に値を設定する方法 — 古川大輔 <mogya99@...> 2013/08/09

=EF=BC=9E=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E5=90=8D=E3=81=AB=E7=

[#49538] Re: コマンドラインで ruby の変数に値を設定する方法 — 尾川敏也 <ogw@...> 2013/08/11

尾川です。

[#49539] Re: コマンドラインで ruby の変数に値を設定する方法 — Nobuyoshi Nakada <nobu@...> 2013/08/11

(13/08/11 11:14), 尾川敏也 wrote:

[#49596] シェルスクリプトの Ruby での置き換え (was Re: コマンドラインで ruby の変数に値を設定する方法) — 尾川敏也 <ogw@...> 2013/09/21

尾川と申します。おはようございます。

[#49598] IO.popen に不具合? — 尾川敏也 <ogw@...> 2013/09/24

たびたびお騒がせします。尾川と申します。

[#49611] IO.popen の不審な挙動を再現するサンプルコード — 尾川敏也 <ogw@...> 2013/09/28

尾川です。

[ruby-list:49565] Re: shebang 行での -E オプションの使い方

From: 尾川敏也 <ogw@...>
Date: 2013-08-21 12:43:14 UTC
List: ruby-list #49565
尾川です。

KOSAKI さん、MUSHA さん、アドバイスありがとうございました。

外部エンコーディングの指定という本来やりたかったことは、教えていた
だいたとおりに

#!/usr/local/bin/ruby
Encoding.default_external = 'Windows-31J'

でできました。

#! 関連がこんなに混沌としているとは思っていませんでした。先々の安心
のためにも、今後はこの方法を使うことにします。

ありがとうございました。


        *****


実用上の問題は解決したので、以下は単なる興味で自分で試した結果です。

#! にまつわる歴史や現状をまとめた

http://www.in-ulm.de/~mascheck/various/shebang/

の内容は大変興味深く読みました。

ともかく、ご指摘いただいた #! 行でのインタープリタに対する引数の扱
いが自分のところでどうなっているのかを自分で実際に確認するため、上
記の URL にある showargs プログラムを使って同じようにテストしてみま
した。

結果は:

$ cat showargs.c 
#include <stdio.h>
int main(int argc, char **argv)
{
    int i;
    for (i=0; i<argc; i++)
        fprintf(stdout, "argv[%d]: \"%s\"\n", i, argv[i]);
    return(0);
} 

$ cat invoker.sh 
#!/tmp/showargs -1 -2 -3 

$ ./invoker.sh 
argv[0]: "/tmp/showargs"
argv[1]: "-1 -2 -3"
argv[2]: "./invoker.sh"

という訳で、確かに引数を全部ひとつの文字列にしてしまっていました。

で、最初に質問させて頂いた私のテストスクリプトで -E の後ろの空白を
消して試したところ:

$ cat mytest.rb 
#!/usr/local/bin/ruby -EWindows-31J
p Encoding.default_external

$ ./mytest.rb 
#<Encoding:Windows-31J>

と、めでたく認識してくれました。

-E の後ろに空白があって -E Windows-31J としていた時のエラーメッセー
ジを良く見ると、

/usr/local/bin/ruby: unknown encoding name -  Windows-31J (RuntimeError)

で、- と Windows-31J の間に空白が2つありました。

最初に質問したときには、Windows-31J というエンコーディング名は伝わ
っているのに、何で知らないと怒っているのだろうかと疑問に思っていた
のですが、Ruby は頭の空白も含めて " Windows-31J" というエンコーディ
ング名は無いと訴えていたのですね。

ようやくすっきりしました。

-- 
尾川敏也 ogw@shizuokanet.ne.jp
http://www6.shizuokanet.ne.jp/ogw/

In This Thread

Prev Next