Shebang과의 명령 거리?

Shebang과의 명령 거리?

shebang(#!/bin/sh)은 bash 스크립트의 첫 번째 줄에 배치되고, 두 번째 줄 뒤에는 일반적으로 스크립트의 기능을 설명하는 주석이 옵니다. 특별한 이유 없이 첫 번째 명령을 shebang 아래에 배치하고 주석(예: 10000행)을 배치하기로 결정했다면 어떻게 될까요? 이로 인해 스크립트 실행 속도가 느려지나요?

답변1

알아보기 위해 두 개의 쉘 파일을 만들었습니다. 각각은 shebang 줄로 시작하고 고유한 명령으로 끝납니다 date. long.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

그 차이가 0은 아니지만, 알아차릴 만큼 충분하지는 않습니다.

좀 더 극단적으로 살펴보자. 내가 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

예, 이론적으로는 그렇습니다. 쉘은 모든 빈 줄을 읽고 비어 있는지 확인해야 하기 때문입니다. 그러나 효과가 너무 작아서 측정하기가 어려울 것입니다. 특히 스크립트를 실행하면 메모리에 캐시되고 입력/출력도 얻지 못하기 때문에 (다시 시작하지 않고) 반복적으로 시도하는 경우 특히 그렇습니다.

관련 정보