"정확한"답변은 물론 The Useless Use of cat
Award에 의해 제공됩니다 .
cat의 목적은 파일을 연결 (또는 "catenate")하는 것입니다. 파일이 하나 인 경우 전혀 연결하지 않으면 시간이 낭비되고 프로세스 비용이 발생합니다.
코드를 다르게 읽을 수 있도록 cat을 인스턴스화하면 하나 이상의 프로세스와 필요하지 않은 하나 이상의 입력 / 출력 스트림 세트가 만들어집니다. 일반적으로 스크립트의 실제 보류는 비효율적 인 루프와 실제 처리입니다. 대부분의 최신 시스템에서는 하나의 추가 기능 cat
이 성능을 저하시키지 않지만 코드를 작성하는 다른 방법 은 거의 항상 있습니다.
참고로, 대부분의 프로그램은 입력 파일에 대한 인수를 허용 할 수 있습니다. 그러나 <
STDIN 스트림이 필요할 때마다 사용할 수있는 셸 내장이 항상 있으므로 이미 실행중인 셸 프로세스에서 작업을 수행하여 하나의 프로세스를 절약 할 수 있습니다.
당신이 쓰는 곳에서 창의력을 발휘할 수도 있습니다. 일반적으로 다음과 같이 출력 경로 재 지정 또는 파이프를 지정하기 전에 명령 끝에 위치합니다.
sed s/blah/blaha/ < data | pipe
그러나 그런 식일 필요는 없습니다. 심지어 먼저 올 수 있습니다. 예를 들어 예제 코드는 다음과 같이 작성할 수 있습니다.
< data \
sed s/bla/blaha/ |
grep blah |
grep -n babla
스크립트 가독성이 문제이고 코드가 지저분하여 줄을 추가하기 cat
가 더 쉬워 질 것으로 예상되는 경우 코드를 정리하는 다른 방법이 있습니다. 스크립트를 나중에 쉽게 알아볼 수 있도록 많이 사용하는 것 중 하나는 파이프를 논리적 집합으로 분리하여 함수에 저장하는 것입니다. 그러면 스크립트 코드가 매우 자연스러워지고 pipline의 한 부분을 쉽게 디버깅 할 수 있습니다.
function fix_blahs () {
sed s/bla/blaha/ |
grep blah |
grep -n babla
}
fix_blahs < data
그런 다음 계속할 수 있습니다 fix_blahs < data | fix_frogs | reorder | format_for_sql
. 그렇게 읽는 pipleline은 실제로 따라 가기가 쉽고 개별 구성 요소는 해당 기능으로 쉽게 디버깅 할 수 있습니다.