리디렉션과 파이프라인

soyeon·2023년 6월 26일
0

Linux

목록 보기
7/7
post-thumbnail

출력 리디렉션: >

  • 출력을 파일에 저장한다.
  • [n]>[|]word
  • 스트림을 대상 파일에 저장
    • 표준 출력 스트림 번호: 1
    • 표준 에러 스트림 번호: 2
    • 생략 시 표준 출력
  • 대상 파일이 존재하는 경우 덮어쓰기
  • noclobber 옵션 설정 시 덮어쓰기 시도 시 에러 발생
  • >| 사용 시 noclobber 옵션 설정 여부와 관계없이 덮어쓰기 성공

실습

  • ps의 출력을 result라는 파일이름으로 저장해보자.
  • 표준 에러 스트림 내용을 result파일에 저장해보자.
    • 생략 시 표준 출력을 저장하기 때문에 덮어쓰기 후 빈 파일이 됨
    • ls /asdada 2> result: 표준 에러 스트림의 내용을 result에 덮어쓰겠다.

추가 모드 출력 리디렉션: >>

  • [n]>>word
  • 스트림을 대상 파일 끝에 저장(append)
    • 표준 출력 스트림 번호: 1
    • 표준 에러 스트림 번호: 2
    • 생략 시 표준 출력

실습

파일 디스크립터로 리디렉션: >&

  • [n]>&[FD]
  • >과 동일하지만 '대상 파일' 대신 '대상 파일 디스크립터'를 지정한다.
  • 표준 출력과 표준 에러를 한꺼번에 출력하고 싶을 때 자주 사용

표준 출력 및 표준 에러 동시 리디렉션: &>

  • &>word
  • 파일 디스크립터 리디렉션 문법이 귀찮고 어렵다.
  • 좀 더 편하게 사용 가능

실습

  • >& 사용
    • 2>&1: 표준 에러를 표준 출력으로 보내겠다.
  • &> 사용: 좀 더 간결

입력 리디렉션: <

  • [n]<word
  • 파일의 내용이 저장된 스트림(n)으로 리디렉션
  • n이 생략되면 표준 입력(fd 0)을 의미

실습

  • wc: 사용자의 입력을 받아 ^D 시 입력받은 텍스트의 라인수, 단어수, 문자수를 출력한다.

Here documents: <<

[conmmand] <<[-]DELIM
...
DELIM
  • 프로그램의 표준 입력으로 multi-line string 전달
  • 코드 블록의 내용이 임시 파일로 저장됐다가 프로그램의 표준 입력으로 리디렉션
  • DELIM은 다른 단어로 변경 가능(의미상 EOF, END 등)
  • <<-: 라인 앞쪽의 tab 문자가 제거됨

실습

  • 아래의 3가지는 모두 같음
  • 다음과 같이 사용 가능

Here strings: <<<

  • [command] <<< word
  • Here document의 한 줄 버전
  • 사용 빈도가 적고 대체로 echo 사용

파이프라인(pipeline): |

  • 프로그램 간 상호작용
  • command1 [ | command2 ] ...
    • command1 의 표준 출력이 command2의 표준 입력으로 연결됨
  • command1 [ |& command2 ] ...
    • command1의 표준 출력과 표준 에러가 command2의 표준 입력으로 연결됨
  • 각 커맨드는 sub-shell에서 실행됨
  • 전체 파이프라인의 exit status는 마지막 실행 커맨드의 exit status다.
  • pipefail 옵션이 설정되어 있다면 실패한 커맨드가 존재하면 실패로 처리된다.

실습

  • 아래 둘은 같다.
  • 아래 세가지는 같다.
  • 연결 가능
profile
사부작 사부작

0개의 댓글