이곳은 백업 블로그 입니다. 현재 캐플이 활동 중인 블로그는 CAppleBlog.co.kr 입니다. 최신 정보들은 새로운 블로그에서 확인해 보세요. ^^

- 이곳은 기존 블로그들의 글을 한군데로 모아 놓은 백업 블로그입니다.

- 현재 링크는 대부분 올바르지 않으며 이러한 링크들은 모두 cappleblog.co.kr 로 이동합니다. (※ 링크 주의)

- 블로그와 커뮤니티는 서로 다른 공간입니다.(로그인을 따로 해야합니다.)

- 저는 윈티티(WinTT)이자 신비(ShinB)이며 캐플(CApple)입니다. 편한대로 불러주세요.

리다이렉션(Redirection)

윈도우의 명령어 처리를 담당하는 명령 프롬프트에는 표준 입력표준 출력이라는 것이 존재합니다. 표준 입력은 '키보드' 이고 표준 출력은 '모니터 화면' 입니다. 즉, 명령어의 입력은 키보드를 통해서 받고 명령어의 결과는 화면으로 출력해 주는 것이 표준이라는 것 입니다.

DIR 이라는 파일 목록 출력 명령을 통해 이러한 표준 입력과 표준 출력을 표현을 해 보았습니다.





어떻습니까? 이제 표준 입력과 표준 출력에 대해서 어느 정도 아시겠죠? 즉, 윈도우의 명령 프롬프트는 키보드를 통해서 명령을 입력 받고 명령 프롬프트 화면을 통해 결과를 출력해 주는 게 표준입니다. 그런데 이러한 입력과 출력의 개체를 바꿔줄 수 있습니다. 이러한 것을 리다이렉션이라고 합니다. 리다이렉션(Redirection)이란 이러한 표준 입력과 표준 출력의 방향을 바꾸어주는 것을 의미합니다. 

이러한 리다이렉션을 통해 입력은 키보드가 아닌 파일을 통해 받을 수 있고 출력은 화면이 아닌 파일로 바로 보낼 수도 있습니다. 입력은 제가 딱히 크게 사용할 일이 없어 사용 예가 그리 생각나지 않지만 출력의 경우 굉장히 유용하게 사용될 수 있습니다. 아래의 질문을 하나 보시죠.





이와 같은 경우 아시는 분들은 아시겠지만 정확한 원인의 파악을 위해선 BCD 저장소의 항목에 대한 내용이 필요하고 질문자께서 이를 올려주시면 답변하시는 분에게 굉장히 중요한 자료가 됩니다. 아시다시피 이러한 내용은 윈도우의 bcdedit 라는 명령을 통해서 확인하는게 가능합니다. 아래와 같이 말이죠.





그런데 이 내용을 알려주고 싶을 때는 이와 같이 스크린 샷으로 찍어 올려주는 방법을 사용해야 합니다. 하지만 댓글에선 파일을 첨부할 수가 없죠. 오직 텍스트를 통해서만 입력을 받아야 합니다. 화면은 순간이기 때문에 일일히 보고 칠 수 밖에 없습니다. 물론 아래와 같은 방법을 통할 수도 있겠지만 약간의 제한을 가질 수 밖에 없습니다.

명령 프롬프트에 출력된 내용을 클립보드에 복사하기


이 때는 리다이렉션을 통하면 위의 출력 결과를 텍스트 파일로 저장하는 방법을 사용 할 수 있습니다. 아래와 같이 말이죠.

bcdedit > bcd.txt
- bcdedit 명령의 결과를 화면이 아닌 bcd.txt 라는 파일로 출력합니다. 이 때 bcd.txt 파일이 존재하지 않는다면 새로 생성하고 존재한다면 덮어씁니다.






보시는 것과 같이 원래대로라면 화면으로 출력되어야 할 내용이 출력없이 명령이 완료된 모습이죠. 이는 리다이렉션을 통해 출력의 방향이 화면이 아닌 bcd.txt 라는 파일로 바뀌었기 때문입니다. 즉, bcdedit 명령의 결과는 고스란히 bcd.txt 라는 파일에 기록이 된 것 입니다. 아래와 같이 말이죠.





이제 이 내용을 그대로 긁어서 올려주시면 답변자가 답변을 하는데 굉장히 수월하겠죠? 리다이렉션이란게 바로 이런 겁니다.

출력의 방향을 바꿔주는 리다이렉션엔 아래의 두 가지 종류가 있습니다.

> - 파일이 존재하지 않으면 새로 생성하고 파일이 존재하는 경우 내용을 덮어씀.
>> - 파일이 존재하지 않으면 새로 생성하고 파일이 존재하는 경우 내용의 마지막에 덧붙임.


이 둘의 차이를 정확하게 이해하기 위해 각각의 리다이렉션을 사용하여 명령을 두 번 내려보았습니다.





어떻습니까? 확실히 아시겠죠? > 는 기존의 파일을 덮어쓰지만 >> 는 기존의 파일에 이어서 마지막에 덧붙여 주는 것 입니다.



이러한 리다이렉션은 배치 파일을 구성할 때 어떠한 명령의 결과를 다른 명령의 값으로 사용해야 할 때 명령의 결과를 텍스트 파일로 저장한 후 해당 파일의 내용을 적절한 명령을 통해 원하는 값을 추출한 후 이를 다시 다른 명령의 매개 변수나 값으로 사용하는 용도로 많이 사용되곤 합니다. 뭐 이러한 예제는 다양한 분들의 배치 파일 예제를 보시면 가끔 보실 수 있으니 잘 살펴보시면 되실 겁니다.

또는 배치 파일에서 > nul 을 통해 명령의 출력 결과를 화면에 표시하지 않게 하는 역할을 하기도 합니다. nul 은 빈 값을 의미합니다. 즉, 출력을 빈 곳으로 보내니 결국 화면에도 파일에도 결과를 출력하지 않고 출력 결과를 날려버리는 용도로 사용하는 것이죠. 뭐 이런 부분은 배치 파일 작성자의 개인 취향입니다.



현재는 리다이렉션 중 출력에 관한 것만 알아보았는데요. 입력의 방향을 변경하는 < 리다이렉션이나 명령의 출력 결과를 다른 명령의 입력으로 전환하는 | 파이프와 같은 것도 있습니다. 리눅스나 유닉스를 공부하시는 분들이라면 아주 지겹도록 사용하는 녀석들이지만 도스나 윈도우에서는 이러한 리다이렉션과 파이프를 아예 사용하지 못할 것이라고 생각하시는 분들이 의외로 계시는 듯 합니다. 리눅스나 유닉스보다 윈도우의 콘솔 커맨드가 솔직히 다소 약하기 때문에 리눅스나 유닉스와 같이 굉장히 다양하고 강력한 활용법 보다야 못하지만 아무튼 도스나 윈도우의 명령 프롬프트에서도 파이프와 리다이렉션을 활용하는 것이 가능합니다. 이 글은 여기까지 입니다. ^ㅡ^*

: