OP가 옵션이 부적절하다고 말한 이유 중 일부는 실제로 근거가 없습니다. 다음은 OP 전략 4를 사용한 효과의 종류를 보여줍니다.
대부분의 배포 grep
에서 /bin
(일반) 또는 /usr/bin
(OpenSUSE, 기타)에 설치되며 기본값 PATH
은 또는 /usr/local/bin
앞에 포함 됩니다. 이것은 당신 이/bin
/usr/bin
/usr/local/bin/grep
#!/bin/sh
exec /bin/grep --color=auto "$@"
여기서 /bin/sh
배포판에서 제공하는 POSIX 호환 쉘 (대개 bash 또는 dash)이 있습니다. 경우 grep
에 /usr/bin
, 다음 있는지 확인
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
이 스크립트의 오버 헤드는 최소입니다. exec
스크립트 인터프리터가 교체되는 문 수단 grep
진; 이는 grep
실행 중에 쉘이 메모리에 남아 있지 않음을 의미합니다 . 따라서, 유일한 오버 헤드는 스크립트 인터프리터의 하나의 추가 실행, 즉 벽시계 시간에서의 작은 대기 시간이다. 대기 시간은 거의 일정하며 ( 페이지 캐시 에 있는지 여부 grep
와 sh
이미 사용 가능한 I / O 대역폭 에 따라 달라짐 ) grep
실행 시간 또는 처리하는 데이터 양 에 따라 달라지지 않습니다 .
그렇다면 래퍼 스크립트가 추가 한 오버 헤드, 즉 대기 시간이 얼마나 걸립니까?
찾으려면 위의 스크립트를 작성하고 실행하십시오.
time /bin/grep --version
time /usr/local/bin/grep --version
내 컴퓨터에서 전자는 실시간으로 0.005 초가 걸리고 (수 많은 실행에서) 후자는 0.006 초 실시간으로 걸립니다. 따라서 내 컴퓨터에서 랩퍼를 사용하는 오버 헤드는 호출 당 0.001 (또는 그 이하)입니다.
이것은 중요하지 않습니다.
많은 일반적인 응용 프로그램과 유틸리티가 동일한 접근 방식을 사용하기 때문에 이것에 대해 "더러운"것도 보지 못합니다. 당신의 컴퓨터에 등의 목록을 보려면 /bin
하고 /usr/bin
바로 실행
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
내 컴퓨터에서 위의 출력을 포함 egrep
, fgrep
, zgrep
, which
, 7z
, chromium-browser
, ldd
, 그리고 xfig
, 나는 꽤 자주 사용하는. 랩퍼 스크립트에 의존하여 전체 분배 "더러운"을 고려하지 않는 한, 랩퍼 스크립트를 "더러운"것으로 간주 할 이유가 없습니다.
이러한 래퍼 스크립트는 다음과 같은 문제를 일으킬 수 있습니다.
출력이 터미널 인 경우 사용자 지원 (스크립트와 반대) 만 기본적으로 색상 지원을 지원하는 grep 버전을 사용하는 경우 랩퍼 스크립트의 이름을 지정 colorgrep
하거나 cgrep
OP에 적합한 항목을 지정할 수 있습니다 .
동작 grep
이 전혀 변경되지 않기 때문에 가능한 모든 호환성 문제를 피할 수 있습니다 .
grep
랩퍼 스크립트를 사용하여 옵션을 사용 하지만 새로운 문제점을 피하는 방법 :
지원 되지 않는 GREP_OPTS
경우에도 GREP_OPTIONS
(이미 사용되지 않으므로) 사용자 정의를 지원하도록 랩퍼 스크립트를 쉽게 다시 작성할 수 있습니다 . 이 방법으로 사용자는 단순히 export "GREP_OPTIONS=--color=auto"
자신의 프로필을 추가 하거나 유사 하게 만들 수 있습니다 . /usr/local/bin/grep
그렇다면
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
주위 $GREP_OPTIONS
에 따옴표가 없으므로 사용자가 둘 이상의 옵션을 지정할 수 있습니다.
내 시스템에서 empty 또는 with로 실행 time /usr/local/bin/grep --version
하는 것은 이전 버전의 래퍼 스크립트만큼 빠릅니다. 즉, 일반보다 실행하는 데 일반적으로 1 밀리 초가 걸립니다 .GREP_OPTIONS
GREP_OPTIONS=--color=auto
grep
이 마지막 버전은 개인적으로 사용하기를 권장하는 버전입니다.
요약하면, OP의 전략 4 :
grep
개발자 가 권장하는 영역 입니다.
구현하기가 쉽지 않습니다 (2 줄).
오버 헤드가 미미 함 (이 특정 랩톱에서 호출 당 1 밀리 초 추가 대기 시간; 각 시스템에서 쉽게 확인)
GREP_OPTS
지원 을 추가하는 래퍼 스크립트로 구현 가능 (더 이상 사용되지 않거나 지원되지 않음 GREP_OPTIONS
)
스크립트 또는 기존 사용자에게 전혀 영향을 미치지 않는 ( colorgrep
/로 cgrep
) 구현 가능
이미 Linux 배포판에서 널리 사용되는 기술이므로 "더러운"것이 아니라 일반적인 기술입니다.
별도의 래퍼 ( colorgrep
/ cgrep
) 로 구현하면 grep
동작에 전혀 영향을 미치지 않으므로 새로운 문제를 만들 수 없습니다 . GREP_OPTS
지원 을 추가하는 래퍼 스크립트로 구현 된 경우를 사용 GREP_OPTS=--color=auto
하면 기본값 추가시 업스트림을 추가 --color=auto
할 때와 동일한 위험 (기존 스크립트의 문제) 이 발생합니다. 따라서 이것이 "해결하는 것보다 더 많은 문제를 일으킨다"는 의견은 완전히 잘못된 것입니다. 추가적인 문제는 없습니다.