2013-03-16 5 views
-1

나는 세미 실시간 bash 스크립트를 작성 중이며 충분히 빠르게 실행되지 않습니다. 내가 이해하는 바쉬는 Bash가 여러분에게 제공하는 명령의 전체 경로를 찾기 위해 일종의 테이블을 참조합니다. 전체 경로를 지정하면 루프에서 실행되는 명령의 속도가 크게 향상됩니까?Bash 스크립트 가속화

+0

직접 시도해 볼 수 있습니다. 스크립트를 실행하고 소요 시간을 확인한 다음 지정된 경로로 다시 시도하고 시간이 덜 소요되는지 확인하십시오. –

+1

속도를 높이려면 "이 도움이 될까요?"라고 추측하는 대신 전체 스크립트를 붙여 넣은 다음 잘못된 핫스팟이나 잘못된 작업을 식별 할 수 있도록하십시오. –

+0

이것은 대부분의 쉘 스크립트에서 가장 큰 오버 헤드 인 외부 프로세스입니다. 예를 들어, 파일리스트가'ls'을 사용하지 않기를 원한다면,'echo *'를 사용하십시오.'cat'의 모든 사용은 아마도 unwarented입니다. 외부 프로그램을 완전히 피할 수는 없지만 최대한 사용을 최소화해야합니다. 그러면 PATH 검색도 줄어 듭니다. – cdarke

답변

6

가능성 없음 bash 쉘은 실제로 찾은 실행 파일을 캐시하여 첫 번째 검색 만 느려집니다. bash 맨 페이지에서

: 이름이 쉘 기능도 내장 명령도이며, 더 슬래시를 포함하지 않는 경우

은 bash는 그 이름의 실행 파일이 들어있는 디렉토리에 대한 경로의 각 요소를 검색합니다. Bash는 해시 테이블을 사용하여 실행 파일의 전체 경로 이름을 기억합니다 (아래 SHELL BUILTIN COMMUNICATION의 해시 참조). PATH에있는 디렉토리의 전체 검색은 명령이 해시 테이블에서 발견되지 않는 경우에만 수행됩니다. bash 스크립트를 가속화

일반적으로 두 가지의 형태로 취 bash는 내부 물건 대신에 부하가 작은 산란 과정 (cut 같은 또는 sed)를 사용하여

  • 을;
  • 외부 프로세스를 생성해야하는 곳에서 더 나은 선택을합니다. 와 문자열의 첫 번째 문자 추출 최초의 예로서

:이 작업을 수행하는 프로세스를 생성해야하기 때문에

firstchar=$(echo $string | cut -c1-1) 

는 끔찍한 생각이다. 당신은 같은 신속 bash에서 똑같은 일을 수행 할 수 있습니다

firstchar=${string:0:1} 

서브 프로세스를 산란의 상대적으로 엄청난 비용하지 않고 있습니다.

두 번째 요점은 하위 프로세스를 실행할 때 작업에 가장 적합한 도구를 선택한다는 것입니다. 예를 들어, 매우 간단한 awk 한 줄 짜기로 수행 할 수있는 경우 많은 grep, cutsed 명령의 방대한 파이프 라인을 사용하지 마십시오.