• ベストアンサー

#!/usr/local/bin/perlで命令が出せません。

プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。 どなたか、アドバイスをいただけないでしょうか? ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl」というコマンドを入力すると、「/cygdrive/c/Perl/bin/perl」というのがでてきたので、「#!/cygdrive/c/Perl/bin/perl」というコマンドを書いても上手くいきませんでした。 ちなみに、私が書いたプログラムは、以下のようなものです。 #!/cygdrive/c/Perl/bin/perl (あるいは#!/usr/local/bin/perl) # hello -- 挨拶のプログラム print ("hello");

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

perl.exe が、あなたの書いたスクリプトを見付けられないんじゃ無いでしょうか。 あなたの書いたスクリプトが hello.pl だとすると、 ./hello.pl とかで起動できないいんですね? 以下の Windows風の絶対パスでの起動を試してみてください。 'c:\foo\bar\hello.pl' type perl の結果でスクリプトの 1行目 を決めるのは、大方は正しいでです。 正しくないのは、ふたつ以上のPerl処理系がインストールされた環境で使い分けるべき場合ですね。 type の結果が 「/cygdrive/c/Perl/bin/perl」というのは 「c:\Perl\bin\perl」であって、Cygwin の Perlでは無いのでしょう。それが Cygwin のShell(bash等) と相性の悪いのはしょうがない事です。 まずは、c:\Perl\bin\perl を使うのか Cygwin のPerl を使うのかを決めるのが良いと思います。 それにってその後にすべき事が変ってきます。

hyahyaemon
質問者

お礼

ご丁寧な回答、ありがとうございます。 ./hello.pl、'c\foo\bar\hello.pl'の両方を試してみたのですが、残念ながら、うまくいきませんでした。 zxcv0000さんの回答を見てはじめて知ったのですが、cygwinにもperlが入っているのですね。 私は、cygwinを通して、別にinstallしたactive perlで処理している気でいました。 >まずは、c:\Perl\bin\perl を使うのか Cygwin のPerl を使うのかを決めるのが良いと思います。 それにってその後にすべき事が変ってきます。 そのようにしようと思います。結論として、c:\Perl\bin\perlを、コマンドプロンプトを用いて、使おうと思います。 cygwinを使おうと思ったのは、「#!」が使えたほうがよいと感じたからだったのですが、どうも今の私には、手に余るようなので、また力をつけてから、cygwinに挑戦しようと思います。 今回はありがとうございました。

その他の回答 (4)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.5

今回も外れているかもしれませんが、#!/usr/local/bin/perl がコメント扱いされている 可能性があると思います。 コマンド行の hello.pl や1行目の /usr/local/bin/perl が見つからなかった場合は、 通常「No such file or directory」のエラーメッセージが出ます。一方、#!/usr/local/bin/perl がコメント扱いされた場合は、次の行の print は Perl の print ではなく、通常のコマ ンドとしてパス上を探します。見つからなかった場合に、「command not found」のエラ ーメッセージが出ます。(以上は Linux の場合で、Cygwin の場合は違うのかもしれません。 その場合は、スミマセン。) #!/use/local/bin/perl がコメントとして扱われるケースとしては、 ・1行目の先頭に空白がある ・1行目が空行で、2行目に #!/usr/local/bin/perl が書いてある ・ないとは思うが ##! になっている などがあります。一度、見直してみては ?

hyahyaemon
質問者

お礼

返事が遅くなり、申し訳ございません。 #!/usr/local/bin/perlが、コメント扱いされている場合があるのですね。 最近、他ごとでバタバタしていて、perlの勉強は進んでいなかったのですが、また勉強を再開したいと思います。 本当に、何度も、ありがとうございました!

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.4

外れているかもしれませんが、改行コードの問題である可能性があると思います。 試しに、1行目の末尾に半角スペースと - を2つ付けて実行してみてください。 #!/usr/local/bin/perl --

hyahyaemon
質問者

お礼

ご回答、ありがとうございました!! 試してみましたが、残念ながら、うまくいきませんでした。 改行コードに問題がある場合もあるんですね。 勉強になりました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

まず実行権限が付いているかどうか. あとは, そのスクリプトのあるディレクトリが PATH に入っているかどうかを確認.

hyahyaemon
質問者

お礼

実行権限とか、PATHとかが、まだ理解できていませんが、それらを勉強してみます。 ありがとうございました!

回答No.1

恐らく、実行権限がないのだと思います。 chmod a+x [ファイル名] としてから、実行してみて下さい。

hyahyaemon
質問者

お礼

実行権限の問題の可能性が高いのですね。 chmod a+x[ファイル名]でも、うまくいきませんでしたが、実行権限に問題であるようなので、その部分について、勉強してみようと思います。どうも、ありがとうございました。

関連するQ&A