知り合いに気になったことを指摘された.
んなことあるかい,スクリプトは実行時にメモリに読み込まれるんでい!と思い込んでいたので,早速調べてみた.
同時作業をするので複数端末を立ち上げるか,screenを使うか,emacsのshellモードを使う.
以下のようなスクリプトを書く.
# test.sh echo "start" sleep 5 echo "1" sleep 5 echo "2" sleep 5 echo "3" sleep 5 echo "4" echo "done"
実行する.
% sh test.sh start
すかさず上記コードの最後の行をコメントアウト
# test.sh echo "start" sleep 5 echo "1" sleep 5 echo "2" sleep 5 echo "3" sleep 5 # echo "4" echo "done"
4が出力されるのかをどきどきしながら待つ.
% sh test.sh start 1 2 3 done %
なんと4は表示されなかった!つまり,シェルスクリプトは1行ずつファイルから読み込みながら逐次実行していると考えられる.
PerlやRubyなどのスクリプト言語はどうなのだろう.Perlはコンパイルしているので実行時のプログラムどおりの挙動を示すに違いない.
確認したところ,PerlやRubyでは実行時のプログラムそのものの挙動を示した.
というわけで,タイトルにある通りシェルスクリプトは文字通りスクリプトを一行ずつ読み込んで逐次処理している.
問題になる可能性は低いと思うけれど,なかなか面白いことを知ることができた.