• ベストアンサー

シェルの中から他のシェルを呼び出す

例えば、ひとつのシェルファイル( aaa.sh )の中に、 ------------------------- #!/usr/bin/csh set HOME=/home/test/tmp bbb.sh ------------------------- と記述した場合、bbb.shで変数$HOMEを使いたいと思いましたが、 使えないようです。(HOME: 未定義の変数と表示されます) どなたか、これ以外の方法で、このように シェルからほかのシェルを呼び出して、変数も引き継がれるような方法ご存知ないでしょうか? 多分こーやれば、こうなるかも!みたいなご回答でも結構ですので情報提供をお願いします。 どうぞ宜しくお願い致します。

  • 1104
  • お礼率38% (5/13)

質問者が選んだベストアンサー

  • ベストアンサー
  • 100Gold
  • ベストアンサー率27% (284/1018)
回答No.1

たぶん環境変数は引き継がれます。 setenvを使えばいいように思います?

1104
質問者

お礼

setenvでできました。ありがとうございます。 まだ、UNIX素人なもので・・・

その他の回答 (3)

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.4

set ではなく、 setenv で設定してください。

1104
質問者

お礼

setenvでできました。ありがとうございます。 まだ、UNIX素人なもので・・・

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

こんにちは 一般的に親プロセスで設定された環境変数は子プロセスでも引き継がれると思うのですが。 また、子プロセスで、その環境変数を変更しても、exitで親プロセスに戻れば、子プロセスで設定した環境変数は親プロセスには引き継がれずに、親プロセスで設定したままだと思います。

1104
質問者

お礼

setenvでできました。ありがとうございます。 まだ、UNIX素人なもので・・・

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.2

というか、シェルはプログラム言語でないので、ちょっとムリかと思います。 bbb.sh → bbb.sh /home/test/tmp という様に引数で渡されたら如何でしょう? bbb.shのなかで set HOME = $1 とかでなんとかなりませんか?

1104
質問者

お礼

setenvでできました。ありがとうございます。 まだ、UNIX素人なもので・・・

関連するQ&A

  • Cシェルについて

    Cシェルについて #! /bin/csh ##! /bin/csh -vx setenv NOHUP '/usr/bin/nohup' set AAA_CSH = $NOHUP' XXX.sh file.txt &' ($AAA_CSH >> /dev/null) >>& err.log シェルスクリプトを作成して上記のとおりnohupでXXX.shを実行するように記述します。 エラーがあった場合、err.logに出力するように作成したつもりなのですが、 XXX.shがなかったとき、 「/usr/bin/nohup: XXX.sh:そのようなファイルまたはディレクトリはありません。」 と標準出力されてしまいます。 このエラーメッセージをerr.logに記述するようにしたいのですが、 どうしたらよいでしょうか? よろしくお願いいたします。

  • 【シェル】while文の変数定義について

    OS:Solaris10 sh:Bシェル お世話になります。 シェルの冒頭で定義した変数をwhile文の中で読み込ませたいです。 現状のシェルは下記の通りです。 ---- #!/bin/sh # *** 変数定義 *** AAA1=Spring BBB1=Summer AAA2=Autumn BBB2=Winter # *** メイン処理 *** i=1 while [ $i -le 2 ]; do AAA=AAA$i BBB=BBB$i echo ${AAA} echo ${BBB} i=`expr $i + 1` done ---- しかし、出力される結果は下記のようになってしまいます。 AAA1 BBB1 AAA2 BBB2 これを冒頭の「*** 変数定義 ***」で定義した値を読み込ませ、下記のような出力結果を得たいです。 Spring Summer Autumn Winter どうかご教授ください。

  • シェル変数(path)の挙動がわかりません

    シェル変数の挙動がわからなくて困っています。 以下のような3ファイルがあります。 % cat /tmp/test_config.sh #!/opt/local/bin/zsh path=($path /tmp) % cat /tmp/test.sh #!/opt/local/bin/zsh . /tmp/test_config.sh echo $PATH echo $path /tmp/test2.sh % cat /tmp/test2.sh #!/opt/local/bin/zsh echo $PATH echo $path which test.sh これを、所有者のユーザで実行するのとsu -c で実行するので挙動が変わります。 % /tmp/test.sh /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /tmp/test.sh % sudo su - hogehoge -c /tmp/test.sh /bin:/usr/bin:/usr/ucb:/usr/local/bin:/tmp /bin /usr/bin /usr/ucb /usr/local/bin /tmp /bin:/usr/bin:/usr/ucb:/usr/local/bin /bin /usr/bin /usr/ucb /usr/local/bin test.sh not found この挙動の違いは、何から産まれるんでしょう? .zshrc でそういう設定ができるんでしょうか? .zshenv は使ってません。 (なお、環境変数$PATHを使えば目的は果たせると言うのはわかっています)

  • 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

  • シェルスクリプト初心者です、以下のシェルを見てくだ

    お世話になります。 CentOS5にて、ディレクトリ「/home/user」からリモートホスト「192.168.11.200」の「/home/user」へ sshの鍵方式を使い、SCPで画像のコピーを行うシェルスクリプトを書きました。 以下のシェルスクリプトを書いたのですが、3行目の「/usr/bin/scp」が引っかかって 「/home/user/move_img.sh: line 3: `/usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE};'」 とのエラーが出てしまいます。 素人のくせにシェルなんて書くなと言われればそれまでですが、 一体どの記述が悪いのか見当がつきません。 ご教授をお願いいたします。 ------ #!/bin/sh for FILE in `find /home/user -regex ".*\.\(jpg\|png\|gif\|JPG\|GIF\|PNG\)"`; /usr/bin/scp -P 22 -i "/home/user/.ssh/id_rsa" -r ${FILE} user@192.168.11.200:${FILE}; done ------

  • 権限の違うシェルスクリプトの実行

    3つのシェルスクリプトがあります。 ●root権限で実行  aaa.csh ●ユーザ指定権限で実行 bbb.csh ●root権限で実行 ccc.csh この3つのシェルスクリプトはaaa.csh →bbb.csh →ccc.cshの順番でバッチ処理として cronに設定したいのですが、 権限が違うのでroot権限のcrontabとユーザ指定のcrontabに それぞれ設定しなくてはいけません。 あまりスマートではないかと思い、 何かよい方法はないかと質問させて頂きました。 3つのシェルスクリプト1つシェルスクリプトにまとめてroot権限のcrontabに設定してしまう方法とかどうでしょうか? ちなみにスクリプトの処理の内容は単純なファイルコピーなどです。 意味分かりますでしょうか? よろしくお願いします。

  • シェルで.bashrcが読めません。

    FreeBSD4.5で、 /home/me/の下に以下のシェルをファイル名1で作成し実行してもsuまでしか動きません。 パスもあっているのですが、原因は何が考えられますか? #!/bin/sh /usr/local/bin/sudo su www /usr/local/bin/bash source /home/me/.bashrc

  • シェルの引数を、実行するパラメータに指定するには?

    シェル初心者です。 シェルの実行パラメータを、その中で実行する処理のパラメータに再び指定したいのですが可能でしょうか。 ただし、パラメータの数は可変です。 環境はSolarisです。 aaa.sh aaa bbb ccc aaa.shの中 bbbコマンド aaa bbb ccc ということを行いたいです。 パラメータ数が固定であれば問題なさそうですが 可変の場合、どのような記述をすればよいでしょうか?

  • シェルで親プロセス終了時に子プロセスも終了させるには?

    シェルスクリプトを作っています. 親プロセス(AAA.sh)から子プロセス(BBB.sh)を呼び出した状態で,AAA.shをkillすると,BBB.shのプロセスが終了しないまま,残ってしまうため, http://oshiete1.goo.ne.jp/qa1968135.html を参考にkill -- -$$で同じプロセスグループのものが終了するように作ったのですが,BBB.shが呼び出される前にAAA.shをkillすると,プログラムが暴走してしまいます. どうすれば暴走せずに,親子ともども終了させることができるでしょうか??? *** AAA.sh *** #!/bin/sh func exit_AAA(){ kill -- -$$ exit 1 } trap "exit_AAA" HUP INT QUIT TERM echo "call BBB??(y/n)" read num ./BBB.sh *** BBB.sh *** #!/bin/sh echo "exit BBB?(y/n)>" read num

  • サブスクリプトの呼び出し

    シェルで、サブスクリプトファイルを呼び出する場合 相対パスで記述する方法はあるのでしょうか? aaa.shと同じフォルダにbbb.shを配置し、 aaa.shの中からbbb.shを呼び出しを ./bbb.sh という感じで記述できる構文?コマンド?はあるのでしょうか? ただ普通に./bbb.shと記述すると、aaa.shを実行したディレクトリから bbb.shを探してしまうので困っています。..当然なのですが、、