
Ubuntu日本語フォーラム

ログインしていません。
ディレクトリ内のファイルをカウントするRubyスクリプト(fcount.rb)を書いて、パスの通った ~/bin に置きました。
shebang を付け加えて実行権限もつけましたが、実行しようとすると「: そのようなファイルやディレクトリはありません」と表示されて実行できません。
takatoh@nightschool $ ls -l bin | grep fcount.rb -rwxr--r-- 1 takatoh takatoh 1679 12月 12 11:18 fcount.rb takatoh@nightschool $ head bin/fcount.rb #!/usr/bin/env ruby # coding: utf-8 # # fcount.rb - File counter # require 'pathname' require 'optparse' takatoh@nightschool $ fcount.rb bin : そのようなファイルやディレクトリはありません
Ruby インタープリターからスクリプトを起動すると、期待通りに動作します。
takatoh@nightschool $ ruby bin/fcount.rb bin 32 bin
また、 ~/bin 内にあるほかのスクリプトは、インタープリターからでなくとも問題なく実行できます。
何か間違えているでしょうか。
よろしくお願いします。
オフライン
takatoh さん
私は Ruby に詳しくはないのですが、Python や Perl、Golangでも
似たような挙動があったので、投稿してみます。
スクリプトの全体が分からないので、
完全な再現は確認できないのですが、
Ubuntu の問題というより、Ruby の問題、
ひいてはコマンドライン引数の問題ではないでしょうか?
実行時に、ruby や python など記述したスクリプト言語の
プログラムを呼び出した場合、コマンドライン引数の第一引数には
スクリプトのパスが入ることがあります。
あれ?逆だったかな?
takatoh による投稿:
コード:
takatoh@nightschool $ fcount.rb bin : そのようなファイルやディレクトリはありません
とありますが、「そのような〜」の前のコロンの前には
本来参照すべきだった変数の値が表示されるのではありませんか?
なので、コマンドライン引数をすべて出力するような
デバッグ用の Print をしてみるとどうなりますでしょうか?
オフライン
hellfireさん、ご返事有り難うございます。
問題が解決しました。
スクリプトのshebangを「#!/usr/bin/ruby」と、直接インタープリターを指定するように変えたら、次のようになりました。
takatoh@nightschool $ fcount.rb bin bash: /home/takatoh/bin/fcount.rb: /usr/bin/ruby^M: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
rubyのあとに^Mがついています。これを見てピンときました。改行コードです。
エディタはSublime Textを使っているのですが、ファイルの改行コードを確認したところ、Windows[CRLF]になっていました。これをUnix[LF]に変更して保存したところ、正常に動作するようになりました。
Ubuntu上でしか作業をしていないのにCRLFになっていた理由はわからないのですが、とにかく当面の問題は解決しました。
オフライン