• 締切済み

unixのsourceコマンドについて教えて下さい

環境変数設定で ファイル(hoge.env)に #!/bin/csh set TEST=a と書きます。 unix> source hoge.env と実行すると、$TESTに環境変数が入ることを確認できますが ファイル(hoge.csh)に #!/bin/csh source hoge.env と書き実行すると、環境変数が設定されません。 最近まで、hoge.cshと実行し問題なく環境変数が設定されていたのですが今日は、これまでと違い環境変数が入りません。 こんなことってあるのでしょうか? OSはSunOS 5.8です 以上よろしくお願いします。

みんなの回答

回答No.2

携帯からなんで簡素ですいません。記述が source ./ファイル名 でもかわらないですよね?

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, おかしいなぁ.... hoge.csh を実行しても環境変数の設定はできないはずなんだけど.... そう思ったわけ: hoge.csh を実行すると, 「現在のシェルとは別に」csh が起動されます. で, その csh の中で source するので, その csh の中では指定した環境変数が設定されます. が, その csh は hoge.csh の終了とともに終了するので, 現在のシェルには設定した環境変数は引き継がれないはず. ということなので, 「これまでは hoge.csh をどのように実行していたのか」などを書いてもらえませんか?

wild-river
質問者

お礼

どうもお返事ありがとうございます。 これまで環境変数をセットする時、 1. unix>source hoge.csh 2. unix>hoge.csh 1,2どちからで、あまり意識せず実行してたのが原因であったと、気がつきました。1でhoge.cshの中でsourceの記述している上に、さらにsourceを実行しているため、混乱してしまったのではないかと思います。 ただ、これまで2で実行した時、何故うまくいってたのか、はっきりしてませんがたまたま、問題でなかったのかもしれません。 混乱させて申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Perl から csh 実行

    やまとです。 いつもありがとうございます。 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から実行する方法を教えてください。 説明が不十分であれば、補足いたしますのでご指摘ください。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • source実行時の引数の渡し方

    SunOS 5.6を使っています。 cshのスクリプト(hoge.csh)を作成し、 %source hoge.csh p1 p2 p3 としたときに、 このスクリプトに引数p1,p2,p3をそれぞれ渡してやりたいのですが、上手く出来ません。(引数なし、と解釈されてしまう) 良い方法が無いでしょうか? よろしくお願いします。 関連 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1969769

  • csh(Cシェル)のevalに関して

    evalを用いてインクルード的な事を行いたいのですが、「コマンドが見つかりません」が出てきて困っています 原因はなにがあるのでしょうか? 色々ネットで調べて同じように記述したつもりなのですが csh初心者で申し訳ありませんが 使い方が悪いのか、環境が悪いのか?判断できません 環境は別の人に作って貰ったんで、環境なら環境から勉強していきたいと考えてます ■TEST010.csh #!/bin/csh echo "TEST010-Step0010" eval `./TEST000.csh` echo "TEST010-Step0020" echo " set root_path $root_path;" echo "TEST010-Step0090" ■TEST000.csh #!/bin/csh set lcmoji01 = /export/home/tbn/km echo "set lcmoji01 $lcmoji01;" ■実行結果 > csh TEST010.csh TEST010-Step0010 ^M: コマンドが見つかりません。 TEST010-Step0020 lcmoji01: 未定義の変数

  • UNIXのソートコマンドについて

    はじめまして、UNIXのsortコマンドについて質問です。 CSVファイルをソートする際、1行目がタイトル行で2行目以降をソートしたいのですがよい方法をご存知ですか? OSはSunOSでバージョンは3.8くらいだったと思います。 よろしくお願いします。

  • UNIXシェルIF判定について

    こんばんは。 以下のUNIXシェルIF判定を理解できません。 #!/usr/bin/csh if ($ENV_ID != -) goto $ENV_SKIP_ID ここでのIF判定で「-」とは何を意味するのでしょうか? 「-」でなければ「$ENV_SKIP_ID」までスキップさせています。 「-」とは…? ご教授の程、宜しくお願い致します。

  • シェルファイル内での「setenv」、「unsetenv」の実行 その2

    シェルファイルの先頭行に、 「#!/bin/csh」 と記述したところ「system: Undefined variable.」というメッセージが出力されてしまいました・・・。 どうしたらよいのでしょう?設定の問題なのでしょうか? よくわからないのですが、 「env | grep csh」 と実行してみると「SHELL=/user/bin/csh」という結果がえられるのですが・・・。

  • CSHの環境変数の設定

    CSHで外部で定義したconfigファイルから変数を読み込み そのシェル及び子シェル内で有効な変数として使用したのですが どのような方法がありますでしょうか? 以下の方法だと親シェルからでは子シェルで設定した変数が読み込めないため困っています。 config.csh #!/bin/csh -f setenv AAA aaa test.csh #!/bin/csh -f set APP_ROOT = `dirname $0` cd $APP_ROOT set CONFIG_FILE=$APP_ROOT"/config.csh" echo $AAA

  • 環境変数の取得について

    Javaプログラムで環境変数を取得することって可能ですか?? 例えば任意の環境変数%TEST%なんかを設定してから実行したら 取得可能ですか??(OSはUnix上です) もしくはプロパティファイルかなんか設定ファイルを使用しても良いと考えているのですが、Unix上でResourceBundleクラスを使用するとき、ファイルの配置場所はどこにあれば良いのでしょうか??

    • ベストアンサー
    • Java
  • シェルファイル内での「setenv」、「unsetenv」の実行

    (UNIX環境) シェルファイル内にて 「setenv LANG ja_JP.SJIS」 「unsetenv LANG」 と記述し実行しようとしたのですが、 「setenv:not found」 「unsetenv:not found」 というエラーが出力されてしまいます・・・。 ちなみにコマンドをそのまま実行した場合は正常に処理されます。 kshにて実行されている為で、cshで実行しなければならないということでしょうか? 現在デフォルトにて何シェルが起動しているのか、どのようしたら分かるのでしょうか? 「env | grep csh」 と実行してみると「SHELL=/user/bin/csh」という結果がえられるのですが・・・。

  • bashでの変数の引渡し方法

    bashを使用するのが初めてなので教えてください。 shellscriptの中で変数を設定するのに共通変数設定用の子Shellを実行して変数を設定したいと思っていますが、うまく動きません。どのように設定したらいいのでしょうか。cshのときはsetenvでよかったのですが。。 親shell(hoge.sh) -------------- #!/bin/sh ./setenv.sh #変数設定用子Shell echo $USER exit 0 -------------- 子Shell(setenv.sh) -------------- #!/bin/sh USER="hoge" exit 0 -------------- 実行すると以下のようになります。 $./hoge.sh USER: not found