アプリ版:「スタンプのみでお礼する」機能のリリースについて

やまとです。
いつもありがとうございます。

Perl + csh を同時(?)に実行する方法を教えてください。
OSはSunです。

具体的にどのような処理を行いたいか簡単に説明しますと。

1.Perlでcshを実行(system関数?)し、cshで環境変数をセット(source)する。
2.cshで環境変数をセットしたら、ファイルを出力する処理が行われます。
3.Perlでcshによって出力されたファイルの内容を画面に表示します。

以下ソースを掲載します。(抜粋して)
==================================================
= Perl ( test_perl.pl )
$data = "ABC";
$ret = system(`test_csh.sh $data`);


ファイル(test.log)を開き、読込、画面に表示します(まだ作成してません。)

==================================================
= Csh ( test_csh.sh )
source test_source.sh
echo $1 > test.log

==================================================
= test_source.sh
setenv CLASSPATH .:/aaa・・・・・・

PATHの設定を行ってます。

==================================================

画面に、「ABC」と出力させたいのです。
Perlからcshが実行されていないように思えるのですが、
Perlのsystem関数の使い方が誤っているのでしょうか?
それとも、ClassPath等の設定をしなければならないのでしょうか?

ちなみにコマンドから、
# test_csh.sh ABC
と実行しますと、ファイルが出力され、かつ、sourceも実行されています。

Perlから実行する方法を教えてください。
説明が不十分であれば、補足いたしますのでご指摘ください。
宜しくお願いします。

A 回答 (4件)

========================================


= Perl ( test_perl.pl )
$data = "ABC";
system("test_csh.sh $data");
# $ret = system(`test_csh.sh $data`);
# だと、バッククオート` を使っているから
# test_csh.sh $dataを実行したときの出力結果が
# system関数の引数として使われます。
# ですから、ダブルクオート" を使いましょう。

# 以下、test.logの内容を出力
open TESTLOG, "test.log" or die "test.log: $!\n";
print <TESTLOG>;
close TESTLOG;

=========================================
こんな感じでできるんじゃないでしょうか(未確認です)。

この回答への補足

回答ありがとう御座います。

結果から申しますと出来ませんでした。
$data = "ABC";
$ret = system("test_csh.sh $data");
ファイル出力すらされません。
test_csh.sh が動いていないような感じです。

しかし、コマンドラインからは実行すると、正常にファイル出力されます。
systemで呼び出すファイル名を、フルパスで指定したりしてみましたが、
いざ画面から実行すると、実装できません。
test_csh.shの実行権限もありますし、PATHの設定が問題なのでしょうか?

補足日時:2004/01/30 11:15
    • good
    • 0

シェルスクリプトの先頭に実行するシェルの指定はあるでしょうか。


具体的に言うとスクリプトの1行目が

#! /bin/csh

となっているでしょうか。

cshのpathは、次のコマンドで確認できます。
which csh
また今回のテストプログラム test_source.sh
を which コマンドでpathが表示されることを確認してください。
    • good
    • 0
この回答へのお礼

mosuradazoさん

ご回答有難う御座います。
お礼の返事遅くなりまして本当にすみません。

結果から申しますと、実装できました。
原因はPerlが動作しているオーナー・ユーザが全く関係ないもので
Path等が全く設定されていなかったのです。
Pathを正しく設定して正常に動作できました。

有難うございました。

お礼日時:2004/02/24 11:36

perl自体が動いてないと思いますがどうでしょうか。


$ret = system
の前に
print "動いた\n";
の文をいれて、実行してみてはいかがですか。
    • good
    • 0
この回答へのお礼

tatsu99さん

ご回答有難う御座います。
お礼の返事遅くなりまして本当にすみません。

結果から申しますと、実装できました。
原因はPerlが動作しているオーナー・ユーザが全く関係ないもので
Path等が全く設定されていなかったのです。
Pathを正しく設定して正常に動作できました。

有難うございました。

お礼日時:2004/02/24 11:37

できなかったんですか。


以下のスクリプトを試したところ、
ファイル作成・ファイルの内容出力ともに
できましたが。

==========
(test_perl.pl)
$data = "ABC";
$ret = system("./test_csh.sh $data");

open TESTLOG, "test.log" or die "test.log: $!\n";
print <TESTLOG>;
close TESTLOG;
==========

==========
(test_csh.sh)
echo $1 > test.log
==========

>systemで呼び出すファイル名を、フルパスで指定したりしてみましたが、
>いざ画面から実行すると、実装できません。
>test_csh.shの実行権限もありますし、PATHの設定が問題なのでしょうか?
いや、フルパスを指定してもだめってことは
PATHの問題ではないでしょう。
何が問題なのかはスクリプトを見てみないとわかりません。
    • good
    • 0
この回答へのお礼

HOGERA3さん

ご回答有難う御座います。
お礼の返事遅くなりまして本当にすみません。

結果から申しますと、実装できました。
原因はPerlが動作しているオーナー・ユーザが全く関係ないもので
Path等が全く設定されていなかったのです。
Pathを正しく設定して正常に動作できました。

有難うございました。

お礼日時:2004/02/24 11:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!