Linux의 Bash 쉘은 사용자와 상호작용하면서 입력을 받고 결과를 출력하는 프로세스입니다. 이러한 입력과 출력을 변경하고 제어하는 것은 리눅스 시스템 관리자나 개발자에게 중요한 작업입니다. 이 글에서는 Bash 프로세스의 입력과 출력을 변경하는 방법에 대해 살펴보겠습니다.
1. Standard Input (stdin) 변경
Bash 쉘에서 표준 입력은 stdin
으로 알려져 있습니다. 기본적으로 stdin
은 터미널로부터 입력을 받습니다. 하지만 입력을 파일로 리디렉션하거나 파이프를 사용하여 다른 프로세스의 출력을 stdin
으로 전송할 수도 있습니다.
파일 리디렉션을 사용한 stdin
변경
다음은 파일 리디렉션을 사용하여 stdin
을 변경하는 예입니다.
$ ./my_script.sh < input.txt
위의 예시에서 my_script.sh
는 input.txt
파일로부터 입력을 받습니다. 따라서 my_script.sh
는 stdin
으로부터 파일의 내용을 읽습니다.
파이프를 사용한 stdin
변경
파이프(|
)를 사용하여 다른 프로세스의 출력을 stdin
으로 전달할 수 있습니다. 아래 예시를 참고하세요.
$ cat input.txt | ./my_script.sh
위의 예시에서 cat
명령어는 input.txt
파일의 내용을 읽고 my_script.sh
로 전달합니다. 따라서 my_script.sh
는 stdin
으로부터 cat
명령어의 출력을 받습니다.
2. Standard Output (stdout) 변경
Bash 쉘에서 표준 출력은 stdout
로 알려져 있습니다. 기본적으로 stdout
은 터미널에 결과를 출력합니다. 그러나 stdout
을 파일로 리디렉션하거나 다른 프로세스의 입력으로 보낼 수도 있습니다.
파일 리디렉션을 사용한 stdout
변경
다음은 파일 리디렉션을 사용하여 stdout
을 변경하는 예입니다.
$ ./my_script.sh > output.txt
위의 예시에서 my_script.sh
는 표준 출력을 output.txt
파일로 리디렉션합니다. 따라서 my_script.sh
의 결과는 output.txt
파일에 저장됩니다.
다른 프로세스의 입력으로 stdout
보내기
파이프(|
)를 사용하여 다른 프로세스의 입력으로 stdout
을 전달할 수 있습니다. 아래 예시를 참고하세요.
$ ./my_script.sh | grep "keyword"
위의 예시에서 my_script.sh
의 출력은 grep
명령어의 입력으로 전달됩니다. 따라서 grep
명령어는 my_script.sh
의 결과 중에서 “keyword”를 필터링합니다.
3. Standard Error (stderr) 변경
Bash 쉘에서 표준 오류는 stderr
로 알려져 있습니다. 기본적으로 stderr
은 터미널에 오류 메시지를 출력합니다. 그러나 stderr
을 파일로 리디렉션하거나 stdout
으로 리디렉션할 수도 있습니다.
파일 리디렉션을 사용한 stderr
변경
다음은 파일 리디렉션을 사용하여 stderr
을 변경하는 예입니다.
$ ./my_script.sh 2> error.log
위의 예시에서 my_script.sh
는 오류 메시지를 error.log
파일로 리디렉션합니다. 따라서 my_script.sh
의 오류 메시지는 error.log
파일에 저장됩니다.
stdout
으로 stderr
보내기
2>&1
을 사용하여 stdout
으로 stderr
을 보낼 수 있습니다. 아래 예시를 참고하세요.
$ ./my_script.sh > output.txt 2>&1
위의 예시에서 my_script.sh
의 표준 출력과 표준 에러 모두 output.txt
파일로 리디렉션됩니다.
마무리
Bash 쉘을 사용하는 동안 프로세스의 입력과 출력을 변경하는 것은 매우 유용합니다. 파일 리디렉션과 파이프를 적절하게 활용하여 작업을 더욱 효과적으로 수행할 수 있습니다. 이 문서에서 소개된 기술을 활용하여 리눅스 시스템 관리 또는 쉘 스크립트 개발 작업을 보다 효율적으로 수행해 보세요.