2015년 4월 16일 목요일

CMD : 출력 재지향 (Redirection/stdin/stdout)

Redirection : 프로그램은 기본적으로 stdin(0)은 키보드, stdout(1)은 화면, stderr(2)은 화면으로 설정이 된다.
                      stdout과 stderr의 차이는, stdout은 버퍼를 거쳐서 화면에 뿌려진다.
                      따라서 버퍼가 다 차기 전까지는 화면에 뿌려지지 않는다.
                      반면에 stderr은 버퍼를 사용하지 않기 때문에, 출력할 데이터는 바로 바로 화면에 뿌려진다.
                      이렇게 기본적으로 설정된 것들을 사용하지 않고, 다르게 사용하고 싶을때
                          재지향 기호 
> 를 사용한다.
              command1  >  filename  :  command1의 stdout출력을 화면이 아니라,  filename으로 보낸다.
                                                         command1의 stderr은 기존처럼 화면에 뿌려진다.
              command1  <  filename  :  command1의 입력을 키보드로부터 받는것이 아니라, filename으로 부터 받는다.
              command1  <  infile > outfile :
                  키보드가 아니라 infile로 부터 입력을 받고, stdout을 화면이 아니라 outfile로 출력을 한다.
                  command1의 stderr은 기존처럼 화면에 뿌려진다.
              command1 2> file  :  command1의 stdout은 화면으로, stderr은 file로 보낸다.
              command1 > file 2>&1     :  
                   command1의 stdout은 file로, stderr은 stdout으로 보낸다.
                   즉 stdout과 stderr모두 file로 보낸다.
                   이 문장을 간단하게 표기하는 또 다른 방법은 command1 &>file  command1 >&file이다.

                command1 >nul : command1의 stdout출력을, 화면에 뿌리는 것이 아니라, 그냥 버린다.

        파이프 :   command1 | command2 : command1의 stdout출력을 command2의 입력으로 보낸다. 
                      이것은  command1 > tempfile,   command2 < tempfile, del tempfile 과 동일하다.
                      command1, command2의 stderr은 기존처럼 화면에 뿌려진다.
                      command1   2>&1  | command2 :
                         command1의 stdout과 stderr을 모두, command2의 stdin으로 보낸다.




---------------------------------------------------------------------------------------

 Sample Code >


SET count_gb=%1
SET server_ip=%2
SET regfile= %Temp%bmsenv.reg
SET tnsfile=c:orantnetworkadmintnsnames.ora


echo %server_ip% ping .......
echo.
PING %server_ip% -n 1 >NUL 2>&1IF ERRORLEVEL 1 (
        ECHO.
        ECHO Warning !!
        ECHO DB Server %server_ip% is not available
        ECHO Check Server IP Address or Server Status
        GOTO END
)

DEL *.BAK > NUL 2>&1
> NUL : 정상 화면 출력을 NUL(버리고), 

2>&1 : 에러 출력을 &1 화면출력한곳으로, 즉 NUL로...


댓글 없음:

댓글 쓰기