シェルスクリプトは文字通りの逐次実行

知り合いに気になったことを指摘された.

シェルスクリプトは実行中にスクリプトを変更すると,変更されたスクリプト通りに動く」というものである.

んなことあるかい,スクリプトは実行時にメモリに読み込まれるんでい!と思い込んでいたので,早速調べてみた.


同時作業をするので複数端末を立ち上げるか,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行ずつファイルから読み込みながら逐次実行していると考えられる.

PerlRubyなどのスクリプト言語はどうなのだろう.Perlコンパイルしているので実行時のプログラムどおりの挙動を示すに違いない.
確認したところ,PerlRubyでは実行時のプログラムそのものの挙動を示した.


というわけで,タイトルにある通りシェルスクリプトは文字通りスクリプトを一行ずつ読み込んで逐次処理している.
問題になる可能性は低いと思うけれど,なかなか面白いことを知ることができた.