1>&1
stdout 또는 stderr은 및/또는 을 사용하여 >&2
동일한 출력(파일 또는 2개의 std 출력 중 하나)으로 쉽게 리디렉션될 수 있습니다 >file
. 동일한 출력을 KSH의 두 std 출력으로 보내는 방법이 있습니까(| tee 파일과 유사하지만 파일에 &2 사용)? stdout과 stderr 모두에 스트림을 보내려고 했지만(각 채널에 하나씩 출력 복사) 임시 개체(변수 또는 파일)를 사용하지 않았습니다.
임시 변수를 사용하지만 이를 피하려고 합니다.
Tempo="$(
#all my code with output to stdout and stderr
)"
echo "${Tempo}"
echo "${Tempo}" >&2
질문자:스택 오버플로여기에 질문을 제안하세요
답변1
시스템에 없는 경우 다음 방법을 /dev/stderr
사용할 수 있습니다 perl
.
{
your-code
..
} | perl -pe 'print STDERR'
perl
입력은 한 번에 한 줄씩 처리되므로 부분 줄은 표시되지 않습니다. 예를 들어 다음 코드를 사용합니다.
printf 'Foo'; sleep 2; printf 'Bar\n'
FooBar
2초 후에 보실 수 있습니다.
또한 일부 명령은 터미널로 전송되지 않을 때 출력을 버퍼링하므로 출력이 완료되는 방식에 영향을 미칠 수 있습니다.
답변2
ksh
이런 일을 할 수 있는 기능이 있는지는 모르겠습니다 . zsh
(이 기능을 사용하여) 수행할 수 있습니다 multios
.
하지만 방법이 있습니다 tee
.
echo foo | tee /dev/stderr
echo foo | tee /proc/self/fd/2