お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2015-12-12 11:50:11

takatoh
新しいメンバ
登録日: 2015-12-12

自作のスクリプトが実行できない

ディレクトリ内のファイルをカウントする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 内にあるほかのスクリプトは、インタープリターからでなくとも問題なく実行できます。

何か間違えているでしょうか。
よろしくお願いします。

オフライン

 

#2 2015-12-12 19:05:54

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: 自作のスクリプトが実行できない

takatoh さん

私は Ruby に詳しくはないのですが、Python や Perl、Golangでも
似たような挙動があったので、投稿してみます。

スクリプトの全体が分からないので、
完全な再現は確認できないのですが、
Ubuntu の問題というより、Ruby の問題、
ひいてはコマンドライン引数の問題ではないでしょうか?

実行時に、ruby や python など記述したスクリプト言語の
プログラムを呼び出した場合、コマンドライン引数の第一引数には
スクリプトのパスが入ることがあります。
あれ?逆だったかな?

takatoh による投稿:

コード:

takatoh@nightschool $ fcount.rb bin
: そのようなファイルやディレクトリはありません

とありますが、「そのような〜」の前のコロンの前には
本来参照すべきだった変数の値が表示されるのではありませんか?

なので、コマンドライン引数をすべて出力するような
デバッグ用の Print をしてみるとどうなりますでしょうか?

オフライン

 

#3 2015-12-12 20:26:15

takatoh
新しいメンバ
登録日: 2015-12-12

Re: 自作のスクリプトが実行できない

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になっていた理由はわからないのですが、とにかく当面の問題は解決しました。

オフライン

 

Board footer

Powered by FluxBB