Distância de um comando de um shebang?

4

Um shebang (#! / bin / sh) é colocado na primeira linha de um script bash, e normalmente é seguido na segunda linha por um comentário descrevendo qual ação o script executa. E se, por nenhuma razão específica, você decidisse colocar o primeiro comando bem abaixo da shebang e do comentário, digamos, de 10.000 linhas. Isso retardaria a execução do roteiro?

    
por user8547 13.11.2014 / 02:47

2 respostas

5

Para descobrir, criei dois arquivos shell. Cada um começa com uma linha shebang e termina com o comando único date . long.sh tem 10.000 linhas de comentários, enquanto short.sh não possui nenhuma. Aqui estão os resultados:

$ 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

A diferença é diferente de zero, mas não é suficiente para você notar.

Vamos ficar mais extremos. Eu criei very_long.sh com 1 milhão linhas de comentário:

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

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

Isso tem um atraso perceptível.

Conclusão

10.000 linhas de comentários tem um pequeno efeito. Um milhão de linhas de comentário causam um atraso significativo.

Como criar long.sh e very_long.sh

Para criar o script long.sh , usei o seguinte comando awk :

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

Para criar very_long.sh , precisei apenas modificar um pouco o código acima:

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

Sim, teoricamente, porque o shell teria que ler todas essas linhas em branco e verificar se elas estão em branco. Mas o efeito seria tão pequeno que você teria problemas para medi-lo - especialmente se você tentou repetidamente (sem reiniciar), porque, uma vez que você executou o script, ele seria armazenado em cache na memória e você nem teria E / S.

    
por 13.11.2014 / 02:53