Shebangとの命令距離?

Shebangとの命令距離?

shebang(#!/ bin / sh)はbashスクリプトの最初の行に配置され、2行目の後には通常スクリプトの機能を説明するコメントが続きます。特別な理由がなく、最初のコマンドをshebangの下に配置し、コメント(10000行など)を配置することにした場合はどうなりますか?これによりスクリプトの実行が遅くなりますか?

答え1

調べるために、2つのシェルファイルを作成しました。それぞれはshebang行で始まり、一意のコマンドで終わりますdatelong.shコメントが10,​​000行もありますが、コメントはshort.shありません。結果は次のとおりです。

$ time short.sh 
Wed Nov 12 18:06:02 PST 2014

real    0m0.007s
user    0m0.000s
sys     0m0.004s

$ time long.sh
Wed Nov 12 18:06:05 PST 2014

real    0m0.013s
user    0m0.004s
sys     0m0.004s

違いはゼロではありませんが、気づくのに十分ではありません。

もう少し極端に見てみましょう。私がvery_long.sh作った百万コメントライン:

$ time very_long.sh
Wed Nov 12 18:14:45 PST 2014

real    0m1.019s
user    0m0.928s
sys     0m0.088s

目立つ遅延があります。

結論として

10,000行のコメントが与える影響はわずかです。百万行のコメントがあると、かなりの遅延が発生する可能性があります。

生成方法long.shvery_long.sh

スクリプトを生成するには、long.sh次のawkコマンドを使用しました。

echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=10000;i++) print "#",i} 1' >long.sh

を生成するには、very_long.sh上記のコードを少し変更するだけです。

echo "date" | awk 'BEGIN{print "#!/bin/bash"} {for (i=1;i<=1000000;i++) print "#",i} 1' >very_long.sh

答え2

はい、理論的にはそうです。シェルはすべての空行を読み、空であることを確認する必要があるためです。しかし、効果が小さすぎて測定するのは難しいでしょう。特にスクリプトを実行するとメモリにキャッシュされ、入出力も得られないため(再起動せずに)繰り返し試みる場合に特にそうです。

関連情報