• 締切済み

perl初心者です。検索パスについて

プログラム経験0の素人初心者ですが技術者向けの方が詳しい方がいらっしゃるかとこちらに書き込みしました。 perlを覚えようと本を買ってきましたが初めからつまづいてしまいました。 環境  winXP HomeEdition sp1 使用ソフト  cygwin  Poderosa(ターミナルエミュレーター) ホームディレクトリの設定と位置  設定「/cygdrive/c/myfolder」  位置「C:\myfolder」 本に書いてあったとおりに、以下のようにファイルを作り、myfolderに保存しました。 ファイル名:calc 中身:以下の通り #!usr/local/bin/perl print("2*3="); print(2*3); print("\n"); Poderosaでcygwinを起動し、 perl calcと打つと 2*3=6と返してくれるのですが、 chmod a+x calc calc と打つとウィンドウズ付属の電卓が起動してしまいます。 ファイル名をtest、中身をprint("test"); 等にした場合には、command not found となってしまいます。 検索パスの設定をしてない為かもしれませんが、検索パスの指定の仕方がわからず困っています。 システムの環境変数のPathの所でどう指定すればいいのでしょう。 どうぞアドバイス宜しくお願いします。

  • Perl
  • 回答数2
  • ありがとう数4

みんなの回答

回答No.2

補足すべき事が2点。 1.スクリプトファイルの内容 >#!usr/local/bin/perl #!/usr/local/bin/perl として下さい。 ルートからの絶対パスでないと、セキュリティ上危険であり、 正しく動いたり/動かなかったり、動作が不定になるので。 2.”./calc”での確認は.. コマンドに、"./"をつけるとコマンドサーチは、検索パスを使わず、 相対ディレクトリと認識して、自ディレクトリで探します。 (この場合、カレントディレクトリで、calcを探す) >windows側の環境変数も教えて頂いたサイトを参考にやってみましたが、それでも./calc と打つと >: bad interpreter: No such file or directory >となってしまいます。 考えるされるのは、 (1) calcコマンド(スクリプト)が見つからない (2) perlが相対パスによる呼び出しのため、perlが見つからない という理由でエラーになってませんか? #!の記述を見直し、./calcを確認してください。

yuzu38
質問者

お礼

再度レス頂いていたのに気づきませんでした、お礼が遅くなりまして本当にごめんなさい! >#!usr/local/bin/perl はこちらでの書き込みで記述ミスしていただけで、実際のプログラムの方では ちゃんと#!/usr/local/bin/perlで記述していました、ご指摘有難うございます。 >(1) calcコマンド(スクリプト)が見つからない >(2) perlが相対パスによる呼び出しのため、perlが見つからない >という理由でエラーになってませんか? #!の記述が合っていましたので、どうして起動しないか分かりませんが、 相変わらず「perl プログラム名」と打てば、その後打ったどのプログラムも 正常に動作していますので、そのまま使っています。 丁寧なご返答頂き有難うございました。

回答No.1

試しに、perlスクリプトを次の書き方で起動してみて下さい。 スクリプトをカレントディレクトリに置いた状態で.. ./calc ./test それで予定のスクリプトが実行されるなら、Windows側の 環境変数は関係なくて、cygwin側のシェルでのパス設定の 問題です。 参考URLに示したページの中程にある「環境設定(Cygwin内部)」の 部分を参照して下さい。 PATH=でシェルのコマンド検索パスを記述していますが、cygwinの シェルは、これに従って起動すべきモノを探すはずです。

参考URL:
http://www.mars.dti.ne.jp/~sohda/cygwin/setenv.html
yuzu38
質問者

お礼

cygwinの方は、Poderosa(ターミナルエミュレーター)が勝手に設定してくれるようで、bashrcというファイルや.bash_profileというファイルがあり、.bash_profileの中で # Set PATH so it includes user's private bin if it exists # if [ -d "${HOME}/bin" ] ; then # PATH=${HOME}/bin:${PATH} # fi # Set MANPATH so it includes users' private man if it exists # if [ -d "${HOME}/man" ]; then # MANPATH=${HOME}/man:${MANPATH} # fi # Set INFOPATH so it includes users' private info if it exists # if [ -d "${HOME}/info" ]; then # INFOPATH=${HOME}/info:${INFOPATH} # fi のように設定されていて、これに何か追加したり、これ自体を変更しようとすると動作不良を起こしてしまいます。.bashrcファイルの方も同様です。 windows側の環境変数も教えて頂いたサイトを参考にやってみましたが、それでも./calc と打つと : bad interpreter: No such file or directory となってしまいます。 もう少し色々やってみます、有難うございました。

関連するQ&A

  • #!/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");

    • ベストアンサー
    • Perl
  • perlでパスが通らない?

    環境はwindowsXPです。 パスがうまく通っていないようです。perl.exeが入っているファイルへのパスは正常に働いているのに、自分で作ったファイルを置いているC:\documents and settings\user\my document\perlというファイルへのパスがうまくはたらきません(Can't open perl script "test.pl": No such file or directoryと表示されます) コマンドプロンプトで「path」を使ってみても上記のフォルダはちゃんとPathに記述されています(;も入っています)。 何がいけないのでしょうか?

  • Perlの超初心者です。

    Perlの超初心者です。 mac osXを使っています。テキストエディットで、#! /usr/bin/perl print "hello world!\n";と書いてperl-test.plと保存しました。そしてターミナルを起動してperl-test.plとタイプしたのですが、-bash: perl-test.pl: No such file or directoryとなってしまいます。 試しにターミナルでperl -le "print 'hello world';"とタイプするとhello worldとかえってきました。 perl-test.plはfinderのデスクトップに保存してあります。いったいどうすればperl-test.plのファイルを実行できるのですか? 教えて下さい。よろしくお願いします。

  • perlとcygwinをインストールしてwindowsにPathを設定

    perlとcygwinをインストールしてwindowsにPathを設定しようとしましたが、 ユーザーの環境変数を C:\cygwin\bin\; C:\xampp\perl\bin\; のように設定しましたが、コマンドプロンプトからは実行できませんでした。 システムの環境変数に追加しようとしましたが、 Pathがいっぱいで追加できませんでした。 Pathがいっぱいの場合、どのように追加したらいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlへのパス

    よろしくお願いいたします。 HP初心者です。 使いたいBBSが見つかったのですが テキストで開いて直していくのですが、最初に 「プロバイダで定められたPerlへのパスを指定します」とあるのですがこのパスというのはどこを見るとわかるのでしょうか? お恥ずかしい質問だと思いますがよろしくお願いいたします。 infoseekのフリーHPスペースに用意されている簡単設置のBBSにはレス機能がないのでファイルがつけられレス機能のあるものを探したのですが私にはなかなか難しいです。 よろしくご指導ください。

  • Perlファイルのパラメータの変数名

    ----------- calc.pl -------- $a=1; $b=2; $c=$a+$b; print "$a+$b=$c"; というPerlファイルの$a,$bをcalc.pl内で固定値にするのでなく ----------- calc.bat -------- capl.pl 1 2 calc.pl 5 3 calc.pl 4 1 … のようにして、perlファイルのパラメータで任意に設定したいのですが、Perlファイルのパラメータは、どんな変数名になるのでしょうか。

    • ベストアンサー
    • Perl
  • Perlのパスって何(>_<)!?初心者です。。。

    http://unastray.com/ のサイトからCGI掲示板のrayboardというものをDLしたのですが最初の設定でいきなりつまづきました(泣)説明文もわかる人にはたやすくわかると思いますがド素人の私には何もわかりません・・・このシステムをケータイサイトに載せても使えるのでしょうか?どなたか詳しく詳細を教えてくださる方お願いします。できたらこれをHTMLに組み込むまでの詳細な手順を教えていただきたいです。 この説明文が一切理解できません(>_<)⇒テキストエディタで rayboard.cgi を開き、最初の行 『 #!/usr/local/bin/perl 』 を※お使いのサーバーのperlのパス(って何?どこを見たらわかるの?)に適宜変更してください。基本的な設定は「user-init.cgi」で、スキンに関係する設定は 「skin-init.cgi」 で行います。設定が終わったら、FFFTP等のFTPソフトを使用してファイルを※アップロードして下さい。(アップロード先は今他のHTMLファイルが入ってるフォルダでいいの?) [ ]の中の数値が※パーミッション(パーミッションとは??)となります。 (何も手を加えずに動作しますが、最低限、user-init.cgi 内にある管理者パスワードだけは変更してください)

    • ベストアンサー
    • CGI
  • WindowsでPerlをする際,1行目の"#! ~"はどのように?

    Perlの参考書・本等ではプログラムファイルの第1行目は #! /usr/local/bin/perl という1行がよく有りますが,WindowsXPを用いている場合では,この1行をどう直せばよいのでしょうか? #! (perl.exeが存在するフォルダのパス) でよいのでしょうか? 私はWindowsXPを使っていて,この1行を使わずにプログラムを書いておりましたので,この1行の意味がよく分かりません。 ある参考書には,"#!はその行に書いたコマンドに,ファイルの残りの部分を渡して実行すると言う性質を持っている"と有りました。だから,試しにfile1.plとfile2.txtを準備し, file1.plの中身  #! (perlの存在するフォルダのパス)\perl.exe  while(<STDIN>){   print;  } file2.txtの中身  hello world として,コマンドプロンプトで file1.pl < file2.txt としたのですが正しく動作しませんでした.(perl file1.pl < file2.txt と入力した場合は正しく"hello world"となりました)

    • ベストアンサー
    • Perl
  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

  • UTF-8で書いたperlのパスが正しく読まれない

    元々htmlファイルもcgiファイルもShift-JISで書いていました 英語環境に変えようと、UFT-8にすべくEncordingConverterでファイルを変換しました htmlファイルは文字コード指定も当然UFT-8にし、アップして表示させてみたところ問題なく表示されました しかし、cgiファイルの方が正しく表示されず、perlチェックをしてみたところパスが ・ソ#!/usr/bin/perl となっていました これが原因で正しく表示されなかったようです そこでcgiファイルをテキストエディタで開いてみたのですが、そのエディタ上では #!/usr/bin/perl と本来あるべき正しい表示になっています 文字コードもUTF-8形式になっています どうしれやればきちんと読み取ってもらえるのでしょうか? エディタで開いても「・ソ」の部分が表示されないのでなおしようがなく困っています どなたか解決方法お分かりの方ぜひご教授ください よろしくお願いします

    • ベストアンサー
    • CGI

専門家に質問してみよう