다음 명령을 실행합니다.
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
이렇게 하면 리디렉션이 허용됩니다.오직stderr를 file.txt로, stdout을 사용하지 않음 - 그것이 바로 당신이 원하는 것입니다.
답변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