다들 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
참고 링크