한편, 명령 프롬프트창 즉 도스창에서는, 프로그램 간에 데이터를 이동시킬 때 재지향이나 파이핑을 사용합니다. 용어는 어렵지만, 실은 굉장히 쉽고 실용적인 것입니다.
재지향(Redirection)에 대해
데이터 입출력의 방향을 바꾸어 주는 것입니다.
가령 dir 이라는 명령을 치면
D:\Z>dir
D 드라이브의 볼륨: Foo
볼륨 일련 번호: 1273-A5D7
D:\Z 디렉터리
2006-07-06 07:18p <DIR> .
2006-07-06 07:18p <DIR> ..
2006-07-03 10:33a 0 0.htm
2006-07-06 07:17p 58 file.wav
2006-07-06 07:17p 10,752 Microsoft Word 문서.doc
2006-07-06 07:18p 41,306 PSD Image.psd
2006-07-06 07:18p 62,166 Scene.max
2006-07-06 07:18p 124,746 WinZip.zip
2006-07-06 07:17p 0 새 텍스트 문서.txt
7개 파일 239,028 바이트
2 디렉터리 54,910,869,504 바이트 남음
D:\Z>
D 드라이브의 볼륨: Foo
볼륨 일련 번호: 1273-A5D7
D:\Z 디렉터리
2006-07-06 07:18p <DIR> .
2006-07-06 07:18p <DIR> ..
2006-07-03 10:33a 0 0.htm
2006-07-06 07:17p 58 file.wav
2006-07-06 07:17p 10,752 Microsoft Word 문서.doc
2006-07-06 07:18p 41,306 PSD Image.psd
2006-07-06 07:18p 62,166 Scene.max
2006-07-06 07:18p 124,746 WinZip.zip
2006-07-06 07:17p 0 새 텍스트 문서.txt
7개 파일 239,028 바이트
2 디렉터리 54,910,869,504 바이트 남음
D:\Z>
이렇게 파일 목록이 명령 프롬프트 화면 즉 도스창에 나타납니다.
만약 dir > test.txt 라는 명령을 준다면, 화면에 아무것도 나타나지 않습니다. 그러면 화면 출력들은 어디로 간 것일까요? 바로 test.txt 라는 파일 속에 들어가 있습니다. 하드의 현재 디렉토리(폴더)에 test.txt 라는 파일이 생성되어 있을 것입니다. 그 파일을 메모장 등으로 열어 보면, 위의 dir 출력 화면과 똑같은 글자들이 고스란히 들어가 있을 것입니다.
> 기호는, 화면의 출력을 파일로 저장하라는 의미입니다. 즉 출력의 방향을, 화면이 아닌 특정 파일로 '재지향'하라는 뜻입니다. 즉 방향을 바꾸라는 의미입니다.
단, 이때 test.txt 라는 파일이 이미 하드에 있다면, 그 test.txt 라는 파일이 "덮어쓰기"가 되어, 원래의 내용이 영원히 사라져 버리므로 주의가 필요합니다.
파일뿐 아니라 장치(device)로도 데이터를 보낼 수 있습니다. 유닉스 계열의 OS에서는 하드웨어 장치도 하나의 파일로 취급하는데, 도스(DOS)도 유닉스에 바탕을 둔 운영체제이기에, 이것이 어느 정도 가능합니다.
dir > prn 이라고 하면 dir 의 화면 출력 결과가 프린터로 전송되고 곧바로 인쇄가 됩니다. (단, 윈도98까지는 이것이 되었는데, 윈도우2000이상에서는 안 먹히는 것 같습니다.) prn 이라는 것은 프린터를 가리키는 가상 파일입니다. 이론적으로만 존재할 뿐, 하드에서 보이지는 않습니다.
dir > nul 이라고 하면, 불필요한 화면 출력 결과를 보이지 않게 없애 버릴 수 있습니다. NUL 이라는 가상 장치는 "블랙홀" 같은 역할을 합니다.
지금까지 설명한 것은 Output Redirection (출력 재지향)입니다.
거꾸로도 가능합니다. 이것을 Input Redirection (입력 재지향) 이라고 합니다.
< 기호를 사용하면, 특정 파일의 내용을 어떤 프로그램의 입력으로서 사용할 수 있습니다.
sort < test.txt 라고 하면, test.txt 의 내용을 sort 라는 명령어 속에 집어 넣으라는 이야기가 됩니다. sort 는 문장의 각 행들을 ABCD순으로 정렬시키는 명령이기에, test.txt 의 내용이 정렬되어 화면에 출력됩니다.
sort < test.txt > test2.txt 라고 하면, 화면에 아무것도 나오지 않습니다. sort < test.txt 이것의 결과가 화면으로 나오지 않고, test2.txt 라는 파일 속에 저장되기 때문입니다.
단, Input Redirection (입력 재지향) 을 지원하는 명령어나 프로그램은 그리 많지 않습니다.
파이핑(Piping)에 대해
재지향은 명령어와 파일(혹은 장치)을 서로 엮는 것입니다.
반면 파이핑(Piping)은 복수의 명령어들을 서로 직접 결합시키는 것입니다.
파이핑에는 파이프(|) 라는 기호가 사용됩니다. 키보드의 플러스 기호 우측에 있는데, Shift키를 누르면서 백슬래쉬(\)기호를 누르면 "|"가 찍힙니다. 숫자 일(1)이나 알파벳 엘(l)로 혼동하지 않도록 주의해야 합니다.
dir | sort
이것은 dir 명령의 화면 출력 결과를 sort 라는 명령으로 직접 보내는 것입니다. 그 결과로, 파일 목록이 정렬되어 출력됩니다.
재지향이나 파이핑은 여러 번 중첩시킬 수도 있습니다.