redirect, PIPE

markyang92·2021년 5월 23일
0

shell-script

목록 보기
8/19
post-thumbnail

redirection

> >& >> <

명령 > 파일

  • 명령 > 파일
    • > : STDOUT
      명령의 출력으로 나오는 STDOUT파일로 '밀어'넣는다. (파일 입장에서는 입력)

명령>& 파일

  • 명령 >& 파일
    • > : STDOUT
    • & : STDERR
      명령stdout, stderr파일로 '밀어'넣는다. (파일 입장에서는 입력)
    • 주의!!!: 순서가 '&>' 로 하면 명령이 백그라운드로 동작하라가 인식이됨
      • $ ps -aux &>
      • ps -aux 프로세스가 백그라운드로 동작함

  • E.g.,


명령 fd> 파일

  • 명령 'fd'> 파일
    • 지정한 파일 스크립터를!! '밀어' 넣는다. (파일 입장에서는 입력)
      • STDOUT: 1
        • date 1> ./output.txt : date 명령의 표준출력을 output.txt에 밀어 넣음
      • STDERR: 2
        • date 2> ./output.txt : date 명령의 표준에러를 output.txt에 밀어 넣음

$ 명령 2> /dev/null: 명령의 error를 보기 싫은 경우

  • 명령 중간 중간 Error를 보기 싫은 경우 stderr(2)/dev/null로 밀어버림
  • 예제
    • /에서 du를 사용하는데, 중간 중간 /proc 쪽 접근 불가 에러 보기 싫음
    • stderr(2)/dev/null로 밀어버림
      $ du -h --max-depth=1 2> /dev/null

명령 fd>&fd 파일

$ 명령 fd>&fd 파일
  • >&가 나와서 또, stdoutstderr 을 내보내는 것 아님? 이라 할 수 있지만!
    fd_src >& fd_dst 로 변경하는 것이다!

  • 예제
    • $ 명령 2>&1 ./output.txt
      • stderr(2)stdout(1)으로 내보낸다.
    • $ 명령 1>&2 ./output.txt
      • stdout(1)stderr(2)로 내보낸다.

stdout, stderr을 모두 /dev/null로 가게하기

$ ./program.sh > /dev/null 2>&1


>>

  • >>
    • 지정한 파일에 stdout이어 붙임
echo -n "hello" >> sample.txt	# 없으면 새로 생성
echo -e "\tworld!" >> sample.txt
echo "nice to meet you" >> sample.txt

==== sample.txt ====
hello    world!
nice to meet you

cmd >> file 2>&1

$ cat files.txt >> file 2>&1
  1. 파일을 >>append 로 연다.
  2. cmdstderr(2)stdout(1)로 redirect한다.
  3. 결론: cmdstderr(2)stdout(1)로 redirect하여 file에 append한다.

cmd >>file1 2>>file2

$ cat files.txt >>file1 2>>file2
  1. file1file2>>append 로 연다.
  2. cmdstdout(1)file1, stderr(2)file2로 redirect한다.

| :pipe

명령 | 명령

  • 위의 redirection >, >>, >& 과의 차이 점은 뒤에오는 dst가 파일이 아닌 명령이라는 것!!
  • pipe는 src 명령의 STDOUT을 dst 명령STDIN으로 보낸다.
$ ls | grep "find"
$ tmux show-buffer | xclip -sel clipboard

EOF

cat > ./hello.txt << EOF
> Name: Hello
> Age: 28
> EOF

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글