리다이렉션(redirection)은 컴퓨팅에서 표준 스트림을 사용자 지정 위치로 우회할 수 있는 다양한 유닉스 셸을 포함한 대부분의 명령어 인터프리터에 일반적인 명령이다. 방향 지정[1], 방향 변경[2]으로도 부른다.

입력, 출력, 오류를 위한 표준 스트림.

유닉스 계열 운영 체제에서 프로그램들은 dup2(2) 시스템 호출이나, 이보다 덜 유연하지만 높은 수준의 stdio 유사물들인 freopen(3)과 popen(3)으로 리다이렉션 기능을 수행한다.

표준 입력, 표준 출력의 리다이렉션

편집

리다이렉션은 특정한 문자열들명령어 사이에 두어서 추가되는 것이 보통이다. 일반적으로, 이러한 문자열들의 문법은 다음과 같다:

명령어1 > 파일1

위의 줄은 명령어1을 실행하며 이로써 나오는 출력물을 파일1로 내보낸다. 기존에 파일1의 존재하는 경우 기존의 파일 내용은 지우고 새롭게 추가된다.

파일의 끝에 출력물을 추가하려면 >> 연산자를 이용한다:

명령어1 >> 파일1

다음을 이용하면

명령어1 < 파일1

명령어1을 실행하되, 파일1이 입력의 대상이 된다. (자판을 이용하는 것과는 반대로)

명령어1 < 들어오는파일 > 나가는파일

위의 줄은 두 개의 기능을 수행한다: 명령어1들어오는파일에서 내용을 불러들인 뒤 나가는파일에 기록한다.

파이프 처리

편집
 
세 개의 프로그램의 파이프라인이 텍스트 터미널 위에 실행되는 모습.

특정 프로그램이 명시적인 중간 파일이 없더라도, 다른 프로그램의 출력을 읽게 하여 프로그램을 실행할 수 있다.

명령어1 | 명령어2

위의 줄은 명령어1을 실행하되, 명령어2에 대한 입력으로서 출력을 사용한다.

아래의 줄은 두 개의 리다이렉션과 임시 파일을 사용하여 동일한 결과를 얻는다:

명령어1 > 임시파일
명령어2 < 임시파일
rm 임시파일

하지만 여기서 명령어2명령어1을 마칠 때까지 실행하지 않으며, 중간 결과물뿐 아니라 각 작업에 요구되는 작업 공간을 보유하기 위해 충분히 큰 스크래치 파일이 필요하다. 이를테면, 도스는 파이프 문법을 인식하지만 이러한 이차적 접근을 이용한다.

명령어 파이프 처리에 대한 좋은 예로, echo를 다른 명령어와 결합하여 비상호적인 셸에서 상호적인 일을 수행하는 것이다. 이를테면 다음과 같다.

echo -e "user\npass" | ftp localhost

위 줄에서 \n은 리턴을 의미한다. 이는 입력 user를 받아 ftp 클라이언트를 실행하고, Enter 키를 누르고 pass를 입력하는 식이다.

도스 환경에서는 format 명령어로 특정 드라이브를 포맷하려면 사용자의 동의를 위해 키보드 입력 Y를 받아야 한다. 다만 다음의 줄을 이용하면

echo y | format c: /q

사용자의 동의를 구하지 않고(컴퓨터 자판의 Y를 누르지 않고도) 셸이 직접 Y를 누르게끔 하여 C 드라이브를 빠른 포맷으로 포맷할 수 있다.

표준 파일 핸들로 나가거나 들어오는 리다이렉션

편집

본 셸에서 기원한 유닉스 셸에서 처음 두 가지 동작은 문자열 바로 앞에 숫자(파일 서술자)를 두어 수정할 수 있다. 이것은 어느 스트림이 리다이렉션에 사용되는지에 영향을 준다. 유닉스 표준 입출력 스트림은 다음과 같다:

핸들 이름 설명
0 stdin 표준 입력
1 stdout 표준 출력
2 stderr 표준 오류

이를테면:

명령어1 2> 파일1

위의 줄은 명령어1을 실행하되, 표준 오류 스트림을 파일1로 리다이렉션 처리한다.

각주

편집

외부 링크

편집