"grep -R mode"가 유효한 명령이 아닌 경우 뒤에서 무슨 일이 발생합니까?

"grep -R mode"가 유효한 명령이 아닌 경우 뒤에서 무슨 일이 발생합니까?

grep검색할 파일 목록을 지정하지 않으면 grep파일 이름을 지정할 때보다 속도가 훨씬 느리다는 것을 알았습니다(목록이 *, 즉 디렉터리의 모든 파일임에도 불구하고).

-R옵션을 사용할 때는 이런 일이 ( grep -R pattern빠르게 ) 발생하지 않는 것 같습니다 grep -R pattern *.

grep -R pattern나는 입력 파일 목록 없이 전화를 거는 나쁜 습관에 빠졌습니다. 지금 사용하고 grep pattern있는데 다음 사항이 알고 싶습니다.

grep -R pattern명령이 유효하지 않은 경우 유효한 명령을 실행하기 위해 배후에서 어떤 일이 발생합니까 ?grep pattern

아니면 다시 말해 둘 사이의 차이점은 무엇입니까?

  1. grep -R pattern
  2. grep -R pattern *
  3. grep pattern

답변1

GNU grep와 일부 다른 구현에는 주어진 파일과 디렉터리를 재귀적으로 검색하게 하는 grep비표준 옵션이 있습니다 .-R

grep명령줄에서 다른 파일이나 디렉터리를 지정하지 않고 사용하면 GNU 구현은 암시적으로 현재 디렉터리를 사용합니다.-R

grep -R PATTERN

그러므로

grep -R PATTERN .

grep -R PATTERN *이는 현재 디렉터리에 숨김 파일이 없거나 에서 dotglob쉘 옵션을 설정한 것과 같습니다 bash. dotglob에서 셸 옵션을 설정 하지 않으면 명령줄의 패턴은 숨겨지지 않은 이름으로만 확장됩니다 bash.*

다른 구현에서는 표준 입력을 재귀적으로 grep하는 것이 거의 의미가 없기 때문에 이것이 합리적인 기본값처럼 보이지만 암시적으로 with를 사용 grep하지 않습니다 ..-R

grepOpenBSD를 예로 들어 보겠습니다 .

$ grep -R PATTERN
grep: warning: recursive search of stdin

grep입력 파일 및 입력 파일 없이 실행하면 -R유틸리티가 표준 입력을 읽게 됩니다. 모든 grep구현이 이렇게 하는 이유는 다음과 같습니다.POSIX는 유틸리티가 다음을 수행해야 한다고 말합니다..

따라서 (완전히 유효한) 명령을 실행하십시오.

grep PATTERN

grep어떤 입력 파일도 터미널의 입력을 기다리지 않습니다 . 를 사용하여 입력 종료 신호를 보내 Ctrl+D거나 를 사용하여 프로세스를 중단할 때까지 입력을 기다립니다 Ctrl+C.

표준 입력 스트림에서 읽는 것과 디렉터리 구조에서 일치하는 패턴을 반복적으로 검색하는 것은 상호 배타적인 작업입니다. 이렇게 해도 소용없어

somecommand | grep -R PATTERN

하지만

somecommand | grep PATTERN

완전히 합리적입니다.

관련 정보