리눅스 grep 파이프가 깨어짐(broken pipe)

2-pi-r·2023년 2월 9일
0

개발

목록 보기
3/8

문제상황

ls -R 디렉토리명 | grep -m 1 -F [2pir]

puTTy에서 명령어를 직접 사용할 때는 오류가 보이지 않고, 파이썬을 통해서 사용하면 log를 찍어보았을 때 ls : 파이프가 깨어짐 이런 오류가 보인다. 하지만 두 경우 모두 작동은 정상적으로 된다.

코드 부연설명

  • ls 명령어의 -R 옵션
    • ls A 하면 디렉토리 A 안의 파일, 디렉토리 목록을 보여준다.
    • ls -R A 하면 디렉토리 A의 하위 디렉토리의 하위의 ... 하위 파일 등을 모두 보여준다. (재귀적으로)
  • grep 명령어의 -m 옵션
    • grep -m 1 A 하면 grep A의 결과 중에서 한 줄만 보여준다. -m 2 하면 두 줄만.
  • grep 명령어의 -F 옵션
    • grep [2pir] 하면 [2pir]에서 [ , ]를 정규식 의미대로 해석한 후에 검색한다.
    • grep -F [2pir] 하면 [2pir]을 문자열 그대로 인식해서 검색한다.

실제 코드(파이썬) :

# for문 안에서
cmd_str = f"ls -R {path_dir} | grep -m 1 -F [2pir]"
if os.system(cmd_str) != 0: # 아무것도 찾지 못했으면
	continue

개념

파이프를 그림과 함께 잘 설명해둔 블로그가 있어서 링크를 첨부한다.
https://gracefulprograming.tistory.com/92

원인, 문제 해결

결론만 말하면 무해한 오류라고 한다.

A | B

프로세스 A의 출력은 프로세스 B에 입력으로 전달된다. 프로세스 B가 프로세스 A의 모든 출력을 읽기 전에 종료되는 경우, 프로세스 A는 출력 파이프가 조기에 닫혔다고 에러를 보여줄 수 있다. 이런 오류는 기본적으로 무해하다.

출처 :

https://stackoverflow.com/questions/15726003/grep-write-error-broken-pipe-with-subprocess

0개의 댓글