パイプの先は。。。
shとbashを使用している場合、
#!/bin/bash -x FG=1 echo $FG | while read line do FG=0 echo "パイプ内 : FG = $FG" # 実行結果 : FG=0 done echo "パイプ外 : FG = $FG" # 実行結果 : FG=1
パイプの先は、サブスクリプトとして実行されているため、 上記のような直観とは違う実行結果となる。
下記のようにリダイレクトすれば、直観通りになる。
#!/bin/bash -x FG=1 echo $FG > /tmp/test.tmp while read line do FG=0 echo "パイプ内 : FG = $FG" # 実行結果 : FG=0 done < /tmp/test.tmp echo "パイプ外 : FG = $FG" # 実行結果 : FG=0
※ちなみにzshでは、今回の問題は発生しない。Bourne shell特有の問題。
#!/bin/zsh -x FG=1 echo $FG | while read line do FG=0 echo "パイプ内 : FG = $FG" # 実行結果 : FG=0 done echo "パイプ外 : FG = $FG" # 実行結果 : FG=0
※zshが入っていない場合は、下記でインストール可能。(ubuntu)
sudo apt-get install zsh
Keyword(s):
References: