• 締切済み

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

  • totmon
  • お礼率66% (213/319)

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

>これだと、シェルが終わっても設定が有効になってしまわないでしょうか? 質問で、「子シェルで設定した変数が読み込めない」とお書きだったので、ちょっと怪しいなと思っていたのですが、変数やプロセスに対しての理解が誤っているようです。 子プロセス(子シェルや子コマンド)で設定したシェル変数や環境変数は、親プロセス(親シェル等)に影響を与えません。 したがって、別ファイルに書いた設定コマンドを有効にするには、子プロセスとして動かしてはだめで、sourceコマンドで親プロセス内で処理する必要があります。 簡単な例題で試してみるところからはじめるのがいいでしょう。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

これだとどこでも読み込んでませんよね。 「config.csh」 setenv AAA aaa 「test.csh」 #!/bin/csh -f set APP_ROOT = `dirname $0` cd $APP_ROOT set CONFIG_FILE=$APP_ROOT"/config.csh" source $CONFIG_FILE #これが読み込み echo $AAA

totmon
質問者

補足

これだと、シェルが終わっても設定が有効になってしまわないでしょうか?

関連するQ&A

  • Pathの記述の仕方

    以下のようなパスの記述をしても問題ないでしょうか? /aaa/bbb/ccc/.../.../bbb/ccc/config.txt 理由としては、以下のシェルのようにconfigファイルを読み込むのに dirnameコマンドを使用して取得するためです。 このコマンドは、コマンドラインから実行する場合と、JOBNETなどの別プロセス(実行ディレクトリは別ディレクトリ)から実行される可能性があります。 Sample.csh #!/bin/csh set SHELL_PATH = `dirname $0` set APP_ROOT = ${SHELL_PATH}"/../.." setenv SERVER_INFO_FILE ${APP_ROOT}"/aaa/bbb/config.txt sample.exe ご回答宜しくお願い致します。

  • 『存在するかどうか分からない』環境変数にcshで新しいパスを設定したい

    Linuxを利用しており、「『存在するかどうか分からない』環境変数に新しいパスを設定したい」のですが、うまくいきません。 言い方を変えると、対象の環境変数が存在しようが存在しまいが、うまくいくようにしたいのです。 具体的には、ログインシェルに tcsh を使用しているため、hogehoge.cshを作成し、/etc/csh/login.d/に入れました。hogehoge.cshの内容は以下のようになります。 #!/bin/csh setenv HOGEHOGEPATH /usr/lib/hogehoge:${HOGEHOGEPATH} ログインしてみると HOGEHOGEPATH: Undefined variable. といった内容のエラーが表示され、環境変数も設定されません。 shで設定する方法もありますがcshで良い書き方はないでしょうか。ご教示お願いいたします。

  • cshで変数名の入れ子ができない

    こんなことをしたいと考えています。 --------------------- set aaa="bbb" set bbb="ccc" echo $aaa echo $bbb echo $($aaa) --------------------- 期待する実行結果としては、 --------------------- bbb ccc ccc --------------------- という感じです。 エラーになってしまうのですが、何かいい逃げ方はありませんか? cshでなくてshでも構いません。 よろしくお願いします。

  • 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: 未定義の変数

  • 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

  • 環境変数の設定

    OS:MacOS10.4.7 ant version:1.6.5 antの設定で困っています。macでの環境変数の設定(パスを通す)はどうすれば良いのか困っています。 現段階ではantをusr/localで展開し、シンボリックリンクを作成。 次段階の環境変数の設定で~/etc/csh.cshrcに setenv ANT_HOME /usr/local/ant set path=( $path $ANT_HOME/bin ) を加えたのですがantが動作しません。 どなたか解決方法・間違え点ありましたら教えてください。 宜しくお願いします!!

  • cshellスクリプトの環境変数で "Bad : modifier in $" のエラー

    C-Shellで環境変数を設定する場合の質問です。$HOGEに$HOGEAを追加しようとした場合、以下のように$HOGEを括弧で括る必要があるようで、そうしないと以下のようなエラーで怒られてしまいます。 これはどうしてなのでしょうか。 -------------------------- #! /bin/csh -f setenv HOGE aaa:bbb setenv HOGEA ccc setenv HOGE $HOGE:$HOGEA # OK setenv HOGE ${HOGE}:$HOGEA # NG -------------------------- <エラー> -------------------------- Bad : modifier in $ ($). --------------------------

  • 変数の引き継ぎ(bash)

    bashで開発をしているのですが、 メインの変数より子シェルの変数に引き継ぎをしたいのですが、 どうすればいいのでしょうか。 test.sh #!/bin/bash # 外部変数 sub_test() { echo $1 } # メイン sub_test # test.sh AAA シェルを実行すると、AAAという文字が出てきません。 宜しくお願いします。

  • シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです

    シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?

  • Servletから呼ぶ外部コマンドの環境変数をJavaでセットしたいです

    JavaServletから、以下でJavaのバッチを呼んでいます。 Process process = Runtime.getRuntime().exec("java -classpath /export/home/test Batch001"); Batch001で使用する環境変数をJavaでセットし別途シェルファイルを作らずにすむ方法はありますでしょうか? シェルであれば、以下のようにできますがファイルを増やしたくないのです。 #/bin/csh/bin setenv LD_LIBRARY_PATH /xxx/xxx/xxx java -classpath /export/home/test Batch001