質問: #### 困っていること 下記のようなスクリプトAを実行し、スクリプトA内で スクリプトBをsourceコマンドで実行しているのですが、exportした変数がブランクになってしまいます。 ##### スクリプトA ``` #!/bin/bash echo ${var} ←ブランク source スクリプトB echo ${var} ←VAR=AAAAAAAAAAAA が表示されてほしいがブランク ``` ##### スクリプトB ``` #!/bin/bash var="VAR=AAAAAAAAAAAA" export var ``` ##### 参考サイト https://qiita.com/shinyashikis@github/items/294766d75c2ac633e22d #### 追記 すいません...記載内容ですが、自己判断で勝手に省略してしまった部分があるのでしっかりすべて記載いたします。 (質問にお答えしていただいた方々すいません...) 1. 下記parent.shをcronで実行 2. parent.sh内でchildA.shを呼び出しし、変数に代入 3. parent.sh内でchildB.shを呼び出しし、変数を表示 を実行しています。 具体的なコードは下記です。 ##### parent.sh ``` #!/bin/bash echo ${var} ←ブランク (source childA 2 > $1 ) | awk '{print strftime("%Y/%m/%d %H:%M:%S",systime())" "$0;fflush()}' >> parent.log ←parent.logに対してchildA.shでechoしたものをログ形式で出力 (source childB 2 > $1 ) | awk '{print strftime("%Y/%m/%d %H:%M:%S",systime())" "$0;fflush()}' >> parent.log ←parent.logに対してchildB.shでechoしたものをログ形式で出力 echo ${var} ←ブランク ``` ##### childA.sh ``` #!/bin/bash var="VAR=AAAAAAAAAAAAA" echo ${var} ← parent.logを確認するとVAR=AAAAAAAAAAAAAが出力されている ``` ##### childB.sh ``` #!/bin/bash echo ${var} ← parent.logを確認するとブランクが出力されている ``` 以上となります。 不備があり大変申し訳ございませんが、よろしくお願いいたします。
回答: パイプで処理すると、子シェルで実行されますので、子シェルでいくら変数を変更しても親シェルには無関係です。 子シェルから親シェルに文字列を伝えるのであれば、ファイルに書き込んで、親シェルで読み込んで下さい。 > > すいません自己判断で不要そうなスクリプトを排除した内容で質問してしまいました。 > > > 部分省略は全然かまわないのですが、省略後のコードで現象が発生することを確認してから書かないと、「質問と全然関係ないことを書いた」と言うことになります。