- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby

はじめに Edit

shebang行(つまり一行目)に

#!/usr/bin/env ruby -Ku

などと書くと

env: ruby -Ku: No such file or directory

などとエラーをはいて動かない件をなんとかする方法

解決方法その1 rubyだけ書く Edit

そもそも/usr/bin/env ruby と書いている時点で rubyにパスが通っていないと実行できないので(だったよね?)、env使わないでrubyとだけ書く

#!ruby -Ku

解決方法その2 フルパスで書く Edit

envを使わないでrubyのフルパスで書く

#!/usr/local/bin/ruby -Ku

でもrubyのパスが変わる場合もあるので避けたい

解決方法その3 $KCODEを使う Edit

1
2
#!/usr/bin/env ruby 
$KCODE='u'

ただーし、SJISつまり、-Ks とか $KCODE='s' のときは注意が必要。
$KCODEの指定だと最初にファイルが読まれるときは、
文字列リテラルが考慮されないのでSJISの場合、化ける。

化ける例

1
2
3
4
5
6
#!ruby
$KCODE="s"

s = "噂のソフト"
puts "表が怖い"
puts s

この例はWindows環境でも簡単に化けます。
解決策は、SJIS使わないでUTF-8にする!でいいじゃないかと思う。
上記例を

$KCODE="u"

にしてUTF-8Nで保存しなおして、UTF-8対応コンソール(か、ターミナルエミュレータ)なんかで実行すると問題なくUTF-8で出力できていることがわかると思う。

1.9での解決方法 Edit

# -*- encoding: utf-8 -*- 

か、

# -*- coding: utf-8 -*- 

でOK。
1行目がshebang(#!rubyとか)なら2行目に書く。

参考リンク Edit

  • Ruby で,文字列を空白文字類や「.」などを区切りとして切り出す
    "文字列を,空白文字類とと半角のカンマ「,」と「\v」と全角の空白文字を区切りとして,文字列の配列に変換" の"Ruby スクリプトの文字コードの設定に注意してください."以下に細かい記述あり
  • Ruby 1.9 m17n リファレンス (不完全版) - diary of a madman
    1.9での挙動。参考になります
  • Ruby 初心者スレッド Part 19の700以降
    700 デフォルトの名無しさん [] 2008/05/30(金) 18:24:17 
    #!/usr/bin/env ruby -Ku 
    
    とファイルの先頭に書いて実行すると、
    
     env: ruby -Ku: No such file or directory
    
    と言われてしまいます。
    envで-Kuをつけたいのですが、
    言われないようにする方法はどのようなものがありますでしょうか?
    
    環境は FreeBSD 6.1-RELEASE-p23 です。 
    
    701 デフォルトの名無しさん [sage] 2008/05/30(金) 18:52:34
    基本的には小手先では無理
    env コマンドは複数の引数をうまく受け取ることを期待できないし、環境によっても動作が違う
    たとえば、その記述は同じ FreeBSD の 5.x では期待通りに動作する
    
    702 デフォルトの名無しさん [sage] 2008/05/30(金) 18:56:33
    いやenvがどうこうというよりカーネルが…
    
    703 デフォルトの名無しさん [sage] 2008/05/30(金) 18:59:33
    あ、どうするかだっけ
    
    #!/usr/local/bin/ruby -Ku 
    
    と書くこと
    ダウンロードして即実行できないことについて文句言う的外れのアホは無視
    実行するスクリプト内容を確認しないような人間をユーザーに引き込むと後々癌になるぞ
    
    で、自前で複数環境で使いたい、という場合が問題なんだが
    
    704 デフォルトの名無しさん [sage] 2008/05/30(金) 19:20:38
    >>700
    shebang行(#! で始まる)に渡せる引数は1つ、という実装が多いから無難なのは、
    
    #!/usr/bin/env ruby 
    $KCODE='u'
    
    705 デフォルトの名無しさん [sage] 2008/05/30(金) 19:32:52
    ruby -Ku と $KCODE='u' はカレーとウンコくらい違う
    
    ちなみに Ruby1.9 ではカレーとウンコが同じになった
    
    706 デフォルトの名無しさん [sage] 2008/05/30(金) 19:37:32
    >>705
    あれ? $KCODEは無視されるんじゃなかったか?
    
    707 デフォルトの名無しさん [sage] 2008/05/30(金) 19:45:49
    warning: variable $KCODE is no longer effective;
    
    値を参照しても代入しても常に nil という頑なな感じの動作
    
    708 デフォルトの名無しさん [sage] 2008/05/30(金) 19:48:01
    end
    end
    end
    end
    
    ))))
    
    709 700 [] 2008/05/31(土) 04:50:05
    調べたらFAQ的な質問みたいですね。
    
    解決法
    ・フルパスでrubyのパス記述 >>703
    ・$KCODEで指定 >>704
    
    パス関係なくするためにenvにしたかったけど、意味ないなあw
    
    ところで、$KCODEで指定する場合は、
    ファイルが本当にUTF-8の文字列(例えば日本語)を含んでいても大丈夫なんでしょうか?
    
    710 デフォルトの名無しさん [sage] 2008/05/31(土) 06:05:04
    大丈夫
    
    711 デフォルトの名無しさん [sage] 2008/05/31(土) 06:11:40
    >>686
    普通に喜ばれたけどw
    
    712 700 [] 2008/05/31(土) 06:33:23
    >>710
    ありがとうございます。
    
    では、ちょっとずれてくるのですが、>>705の
    >‎ ruby -Ku と $KCODE='u' はカレーとウンコくらい違う 
    
    というのはどういう違いなのでしょうか?
    どこかに簡単な解説などないでしょうか?
    
    713 700 [] 2008/05/31(土) 06:34:05
    いえ、気になったというより、変なところでハマりたくないので知っておきたい、
    といった理由からです。
    
    714 デフォルトの名無しさん [sage] 2008/05/31(土) 09:00:31
    >>709
    大丈夫じゃない場合がある
    
    リファレンスマニュアルにも記述があるけど
    $KCODEの指定が効いてくるのは、$KCODEへの代入が実行された後なので
    最初に読むファイルに日本語が含まれていると、パースエラーになることがある
    
    詳しくはFAQの10.2
    ttp://www.ruby-lang.org/ja/man/html/FAQ_C6FCCBDCB8ECA4CEBCE8A4EAB0B7A4A4.html
    
    715 デフォルトの名無しさん [sage] 2008/05/31(土) 13:57:32
    問題になることがあるのはShift_JISの場合。
    EUC-JPはUTF-8にはそういう性質はない。
    
    -Kを指定してあれば日本語を識別子に使うこともできるが$KCODEでは無理
    という違いもあるが、それは正直お薦めしない。
    
    ちなみに-Kは1.9でもきくが、マジックコメントのほうが推奨。
    
    #!/usr/local/bin/ruby 
    # -*- encoding: ut-f8 -*- 
    
    716 デフォルトの名無しさん [sage] 2008/05/31(土) 20:25:40
    #!/usr/local/bin/ruby 
    # -*- coding: utf-8 -*- 
    

Show recent 10 comments. Go to the comment page.

  • "#!ruby -Ku"でいいじゃん?というのに気がついたので追記 -- TOBY 2010-06-24 (Thu) 09:17:44
  • 1.9での解決方法で ut-f8 になってます。 -- 通りすがり? 2013-10-31 (Thu) 02:04:21
    • ありがとうございます!!なおしました -- TOBY 2013-11-05 (Tue) 18:55:38
Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2013-11-05 Tue 18:55:12 JST (1415d)