다음 명령을 실행합니다.
pkg_add emacs-23.4,2.tbz 2> output.log
출력은 여전히 터미널에 표시됩니다. 나는 누르면 ↑, 내가 얻을
pkg_add emacs-23.4,2.tbz 2 > output.log
앞에 공백이2
있습니다.
원래 이것을 넣지 않았습니다. 나는 노력한다
pkg_add emacs-23.4,2.tbz > output.log 2>&1
나는 누르면 다시 ↑, 공간이 추가되었습니다 .
왜 이런 일이 발생합니까?
FreeBSD에서 csh를 실행하고 있습니다.
답변
2> 리디렉션은 csh 또는 tcsh에서 작동하지 않습니다.
스타일 재 지정을 사용하려면 chsh
명령을 사용하여 쉘을 / bin / sh 또는 / usr / local / bin / bash로 2>
변경하십시오. 참고 : 루트 쉘을 / usr / local / bin / bash로 변경하지 마십시오
csh와 tcsh는 표준 출력과 오류를 개별적으로 리디렉션 할 수 없지만 >&
결합 된 출력을 파일로 리디렉션합니다.
답변
STDERR을 숨기거나 STDOUT으로 리디렉션하려고하는지 잘 모르겠습니다.
STDOUT을 파일로 경로 재 지정하려면 다음을 수행하십시오.
pkg_add emacs-23.4,2.tbz > stdout.log
STDOUT 및 STDERR을 파일로 경로 재 지정하려면 다음을 수행하십시오.
pkg_add emacs-23.4,2.tbz > & stdxxx.log
STDOUT을 파일로 리디렉션하고 STDERR을 숨기려면 다음을 수행하십시오.
( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null
STDOUT을 콘솔로 리디렉션하고 STDERR을 숨기려면 다음을 수행하십시오.
( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null
STDOUT을 콘솔로 리디렉션하고 STDERR을 파일로 리디렉션하려면 :
( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log
STDOUT을 파일로 리디렉션하고 STDERR을 파일로 리디렉션하려면
( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log
편집 : 이것이 작동하는 이유는 ()의 동작이 먼저 발생하기 때문입니다. Ergo, STDOUT을 리디렉션하면 더 이상 () 외부에서 사용할 수 없습니다. STDERR 만 남긴 다음 원하는대로 리디렉션 할 수 있습니다.
답변
Csh에서 수행하는 방법을 알고 있지만 2 개의 셸을 사용합니다.
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
이러한 방법으로 stdout없이 stderr 만 file.txt 로 리디렉션 할 수 있습니다 .