standard stream redirection / pipelining

sycho·2023년 7월 10일
0

cs-tips

목록 보기
4/16

다들 linux를 쓰는 저마다의 이유가 있겠지만... 나같은 경우에는 다음과 같다.

  • linux command가 window command보다 사용하기 편해서
  • linux os 구조를 window os 구조보다 더 잘 알고 있어서 관련 문제 해결이 좀 더 용이해서
  • mac이 없어서
  • 과제나 연구실에서 할당하는 VM이 전부 linux 기반이어서

이 때문에 주로 쓰는 컴퓨터가 게임해야해서 windows OS기반이긴 하나, WSL2로 linux 환경에서 작업하거나 외부에서 준 linux VM에서 작업하는 경우가 많다.

그 중에서도 가장 유용한 기능이라고 생각하는게 standard stream들을 위한 redirecting/pipelining 기능이다. 쉘에 프로그램을 돌렸을 때 output이 무진장 많이 나올 때 따로 저장하기에 용이하기도 하고, 마찬가지로 쉘에 프로그램 돌릴때 복잡한standard input을 제공하고 싶을 때도 용이하기 때문.

물론 freopen을 쓴다든가, dup, dup2 함수를 쓴다든가 등 더 세밀한 조절이 가능하면서 linux에 국한되지 않은 방식도 있지만 간편한 방식으로는 이것만한게 없어서 매우 선호하는 편이다.

오늘 할 얘기의 원리는 linux file system 및 standard stream handling과 연관이 깊지만, 여기서는 command만 알아보겠다. 궁금하다면 이 링크를 참고

  • 쉘에 돌린 프로그램에 나오는 출력물을 파일(result.txt)에 저장하고 싶은 경우 (이미 파일이 있는 경우 덮어씀)
(돌릴 프로그램) > result.txt
  • 쉘에 돌린 프로그램에 나오는 출력물을 파일(result.txt) 뒤에 붙여서 쓰게 하고 싶은 경우
(돌릴 프로그램) >> result.txt
  • 쉘에 돌린 프로그램에 나오는 오류들을 파일(result.txt)에 저장하고 싶은 경우 (이미 파일이 있는 경우 덮어씀)
(돌릴 프로그램) 2> result.txt
  • 쉘에 돌린 프로그램에 나오는 오류들을 파일(result.txt) 뒤에 붙여서 쓰게 하고 싶은 경우
(돌릴 프로그램) 2>> result.txt
  • 쉘에 돌린 프로그램에 나오는 출력 및 오류를 전부 파일(result.txt)에 저장하고 싶은 경우 (이미 파일이 있는 경우 덮어씀)
(돌릴 프로그램) &> result.txt
  • 쉘에 돌린 프로그램에 나오는 출력 및 오류들을 파일(result.txt) 뒤에 붙여서 쓰게 하고 싶은 경우
(돌릴 프로그램) &>> result.txt
  • 쉘에 돌린 프로그램에 나오는 출력을 파일(result.txt)에도 저장하고 쉘에도 보이게 하고 싶은 경우
(돌릴 프로그램) | tee result.txt
  • 쉘에 돌린 프로그램에 나오는 출력을 파일(result.txt) 뒤에 붙여서 쓰면서 쉘에도 보이게 하고 싶은 경우
(돌릴 프로그램) | tee -a result.txt
  • 쉘에 돌린 프로그램에 나오는 출력 및 오류들을 파일(result.txt)에도 저장하고 쉘에도 보이게 하고 싶은 경우
(돌릴 프로그램) |& tee result.txt
  • 쉘에 돌린 프로그램에 나오는 출력을 파일(result.txt) 뒤에 붙여서 쓰면서 쉘에도 보이게 하고 싶은 경우
(돌릴 프로그램) |& -a tee result.txt
  • 쉘에 돌릴 프로그램에 파일(input.txt)을 standard input으로 제공하고 싶은 경우
(돌릴 프로그램) < input.txt

참고 링크

profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글