与 Shebang 的命令距离?

与 Shebang 的命令距离?

shebang (#!/bin/sh) 放置在 bash 脚本的第一行,第二行后面通常是描述脚本执行的操作的注释。如果没有特殊原因,您决定将第一个命令放置在 shebang 和注释下方,例如 10000 行,该怎么办?这会减慢脚本的执行速度吗?

答案1

为了找到答案,我创建了两个 shell 文件。每个都以 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

是的,理论上是这样,因为 shell 必须读取所有这些空行并验证它们是否为空。但是效果会非常小,以至于您很难测量它 - 特别是如果您反复尝试(无需重新启动),因为一旦您运行脚本,它就会被缓存在内存中,您甚至不会任何输入/输出。

相关内容