다음 명령을 실행합니다.
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를 실행하고 있습니다.
답변1
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
편집: 이것이 작동하는 이유는 ()의 작업이 먼저 발생하기 때문입니다. 따라서 STDOUT을 리디렉션한 경우 () 외부에서는 더 이상 사용할 수 없습니다. 그러면 STDERR만 남게 되고 원하는 대로 리디렉션할 수 있습니다.
답변2
2> 리디렉션은 csh 또는 tcsh에서 작동하지 않습니다.
chsh
스타일 리디렉션 을 사용하려면 명령을 사용하여 셸을 /bin/sh 또는 /usr/local/bin/bash로 변경하세요 2>
.메모:루트의 쉘을 /usr/local/bin/bash로 변경하지 마십시오.
csh 및 tcsh는 표준 출력과 오류를 별도로 리디렉션할 수 없지만 >&
결합된 출력을 파일로 리디렉션합니다.
답변3
Csh에서 수행하는 방법을 알고 있지만 2개의 쉘을 사용합니다.
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
이러한 방법을 사용하면 리디렉션이 가능합니다.오직stdout 없이 stderr를 file.txt로 변환 - 즉 원하는 것입니다.
답변4
nikc의 답변과 관련하여 Bourne 쉘과 동일한 동작을 달성하려면 대신 /dev/tty
FIFO를 사용하십시오.
STDOUT을 콘솔로 리디렉션하고 STDERR을 숨기려면 다음을 수행하세요.
mkfifo stdout
( pkg install -y emacs > stdout ) >& /dev/null & cat stdout
STDERR을 콘솔로 리디렉션하고 STDOUT을 숨기려면 다음을 수행하세요.
pkg install -y emacs > /dev/null