WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:[#!〜]のパス部の省略方法

0:[投稿] yama [2002/08/29 11:14 ][環境:WIN+IE UNIX系+Perl]

はじめまして。yamaと申します。

perlのソースを現在あるサーバーから別のサーバーに移動しようということになり、
環境を調査していたところ、次の点でつまずいてしまいました。
・perlのインストール先が違う(usr/bin/perlとopt/local/bin/perl)
上記が原因で、ファイルをそのままコピーしても動作することができません。

そこで、「環境変数をしようしてはどうか?」と思い、いろいろ調べて見ましたが、「#!」は、カーネルが解釈するところらしく環境変数,シェル変数などの使用はNGという事実を知り、ここで行き詰まってしまいました。


ここでお願いです、「#!user/bin/perl」の部分を環境に依存しないような記述方法をご存知の方がいらっしゃいましたら、未熟者の私にご教授していただけないでしょうか?
よろしくお願いいたします。

環境は、LinuxとUnixです。

以上


1:[回答] 中根 [URL] [2002/08/29 11:20 ]

こんにちは。

移動先のサーバにも、Perlが入っているんですよね。
それなら、一行目を一括して書き換えるようなスクリプトを
書いてしまった方が手っ取り早いと思います。

環境に依存しないような#!の書き方は知りません。


2:[回答] yama [2002/08/29 13:42 ]

ご回答ありがとうございます。
確かにそうなのですが、メイン機のバックアップとして運用して行きたい為、できれば同じソースで管理していきたいと思ってます。

ちょっと説明不足でした、ごめんなさい。


3:[回答] やじうま1号 [2002/08/29 13:51 ]

シンボリックリンクでは駄目なのでしょうか。


4:[回答] yama [2002/08/29 16:13 ]

シンボリックリンクで試してみました。
結果は、OKでした。
 そこから、ちょっと欲張ってこのファイルをドキュメントルートに置いて、パスを通したらどうかなぁ?と思い、試すとNGでした。

この結果から行きますと、シンボリックパスまでを相対パスであらわさないといけないということですよね?

これ以上の手立てはありませんかね?
なければ、これでやってみようと思います。


5:[完了] yama [2002/08/29 17:06 ]

自己レスです。

改めて考えてみると、シンボリックパスをメイン機と同じ改装にお置けばいい話でしたね。。(^。^;)

お恥ずかしい。。。

やじうま1号さん、中根さん親切に対応していただきありがとう
ございました。


6:[完了] B-Cus [2002/08/30 02:34 ]

> 「#!」は、カーネルが解釈するところらしく

例外 (ライブラリが解釈する) もありますが、まーほとんどはカーネルが解釈しますね。

> 環境変数,シェル変数などの使用はNGという事実を知り

   #!$PERL_PATH

みたいな書き方ができないか、ということなら、できません。


環境変数 PATH に /usr/bin や /opt/local/bin が含まれているなら
    #!/usr/bin/env perl
でいけます。ほとんどの OS で /usr/bin/env は存在します。

環境変数 PATH に /opt/local/bin が含まれていない場合などは
    #!/usr/bin/env PATH=/usr/bin:/opt/local/bin perl
でいけるかもしれませんが、env コマンドの実装依存かも。

# env が setenv(2) してからコマンドを exec(2) しているなら OK でしょうが、
# execve(2) を直接読んでいたりしたら execve(2) の実装による (かも)。
# でもおそらくほとんどの OS でいけそうな気もします。


少なくとも Solaris2.6 や FreeBSD 4.4-RELEASAE ではできました。


7:[完了] yama [2002/08/30 18:03 ]

B-Cusさん、どうもありがとうございます。

こちらでも、試してみましたができました。

今後ともよろしくお願いいたします。


8:[完了] 追加情報 [2002/08/31 00:18 ]

> #!/usr/bin/env perl

これは目から鱗な情報ですね。

> # でもおそらくほとんどの OS でいけそうな気もします。
> 少なくとも Solaris2.6 や FreeBSD 4.4-RELEASAE ではできました。

ついでですので、cygwinでも試したところ、出来ました。
#興味があったので、ご報告まで。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World