MSDN 및 이 문제는 Windows가 하나의 파일에 표준 출력 및 표준 오류를 cmd를 리디렉션의 예를 제공합니다 :
dir file.xxx 1> output.msg 2>&1
STDERR 및 STDOUT이 다른 프로그램으로 파이프 될 때 동일한 작업을 수행하려고합니다. STDERR 리디렉션이없는 사용법은 다음과 같습니다.
net use Z: \\server\share | TimeStampPipe.exe >> logfile.txt
"net use"의 STDERR 및 STDOUT이 TimeStampPipe.exe로 파이프되기를 원합니다. TimeStampPipe.exe의 STDERR은 신경 쓰지 않습니다. 2> & 1은 TimeStampPipe.exe가 아닌 넷 사용에 적용된다는 것을 나타 내기 위해 어디로 가나 요? 나는 이것을 시도했다
net use Z: \\server\share 1> 2>&1 TimeStampPipe.exe >> logfile.txt
그리고 얻었다 2>&1 was unexpected at this time.
나는 이것을 시도했다
net use Z: \\server\share 1| 2|&1 TimeStampPipe.exe >> logfile.txt
그리고 얻었다 & was unexpected at this time.
배관 할 때 이렇게하는 방법이 있습니까? 다음과 같이 시도해 볼 수 있습니다.
net use Z: \\server\share 1> tempfile.txt 2>&1
type tempfile.txt | TimeStampPipe.exe >> logfile.txt
del tempfile.txt
더 간결한 접근 방식이 있습니까?
편집 : 2>&1
혼자 사용하기 위해 @compo의 제안을 시도했습니다 . 다음 세 가지 형태를 시도했습니다.
net use Z: \\server\share | 2>&1 TimeStampPipe.exe >> logfile.txt
net use Z: \\server\share | TimeStampPipe.exe 2>&1 >> logfile.txt
net use Z: \\server\share | TimeStampPipe.exe >> logfile.txt 2>&1
각각의 경우 stdout은 올바르게 파이프되지만 net use의 모든 stderr 출력은 파이프를 통하지 않고 화면으로 이동합니다.
다른 사람들이 이미 주석에서 지적했듯이 다음을 수행해야합니다.
net use Z: \\server\share 2>&1 | TimeStampPipe.exe >> logfile.txt
STDOUT 과 STDERR 을 파일 로 리디렉션하는 올바른 코드가 이미 있습니다 .
dir file.xxx 1> output.msg 2>&1
다음과 동일합니다.
dir file.xxx > output.msg 2>&1
출력 리디렉션 ( >
)은 기본적으로 STDOUT (핸들 1
) 에서 읽습니다 .
표현식 2>&1
은 핸들 2
( STDERR )이 핸들 1
( STDOUT )이 현재 (재) 지정되는 대상으로 재 지정되도록 정의합니다 . 그 표현의 위치가 중요합니다.
파이프 ( |
)의 경우 동일한 기술을 적용해야합니다. 파이프 는 left-side 명령 의 출력 ( STDOUT , handle 1
)을 right-side 명령 의 입력 ( STDIN , handle 0
)으로 리디렉션한다는 것을 기억하십시오 .
이제 왼쪽의 STDOUT 과 STDERR 을 오른쪽의 STDIN 으로 리디렉션하고 싶습니다 . 오른쪽은 변경되지 않았으므로 그대로 유지합니다. 그러나 왼쪽은 수정해야합니다. STDOUT은 이미 원하는 위치로 이동하지만 STDERR 은 아직 수행하지 않으므로 출력 리디렉션 ( ) 과 동일한 표현식을 사용하여 STDOUT 대상으로 리디렉션해야합니다 >
.
net use Z: \\server\share 2>&1 | TimeStampPipe.exe >> logfile.txt
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다