この人頭いいなと思ったエピソード

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

A 回答 (2件)

ご希望のような事を行いたい場合、変数を設定するスクリプト(質問での子シェルsetenv.sh)を「. filename」のような感じでシェルスクリプト(質問での親シェルhoge.sh)で指定します。



ちなみに「. filename」と指定すると、filenameで指定されたファイルから1行ずつ読み出し実行してくれます。

質問にあるシェルスクリプトを修正すると下記のような感じになります。

○hoge.sh
--------------
#!/bin/sh
. ./setenv.sh #変数設定用子Shell

echo $USER
exit 0
--------------

○setenv.sh
--------------
#!/bin/sh
USER="hoge"
--------------

%./hoge.sh
hoge
    • good
    • 0
この回答へのお礼

できました!!ありがとうございます。
子Shellの中ではexitもいらないんですね。
勉強になりました。

お礼日時:2005/10/14 15:13

子シェルから親シェルへ環境変数の引き渡しはできなかったと記憶していますが可能性があるとすれば、子シェルの部分を



USER="hoge"
export USER
exit 0

とするぐらいでしょうか。

この回答への補足

galoonさん、
回答ありがとうございます。
exportを使用しても結果は一緒でした。
>子シェルから親シェルへ環境変数の引き渡しはできなかったと記憶していま

もしそうなら他の代替案はあるのでしょうか?皆さんはどうしているのでしょうか?

補足日時:2005/10/14 14:33
    • good
    • 0

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


おすすめ情報