stdout과 stderr를 시각적으로 분리하여 인터리빙하지 않고 쉽게 식별 할 수있는 방법을 찾고 있습니다. 이상적으로는 stdout과 stderr가 화면에 표시되는 별도의 영역 (예 : 다른 열)을 가질 것입니다. 예를 들어 다음과 같은 출력이 표시됩니다.
~$ some command
some useful output info
ERROR: an error
more output
ERROR: has occurred
another message
~$
대신 다음과 같이 보일 것입니다.
~$ some command |
some useful output info |
more output | ERROR: an error
another message | ERROR: has occurred
~$ |
GNU screen
의 수직 분할 기능을 사용할 수 있습니다 .
#! /bin/bash -
tmpdir=$(mktemp -d) || exit
trap 'rm -rf "$tmpdir"' EXIT INT TERM HUP
FIFO=$tmpdir/FIFO
mkfifo "$FIFO" || exit
conf=$tmpdir/conf
cat > "$conf" << 'EOF' || exit
split -v
focus
screen -t stderr sh -c 'tty > "$FIFO"; read done < "$FIFO"'
focus
screen -t stdout sh -c 'read tty < "$FIFO"; eval "$CMD" 2> "$tty"; echo "[Command exited with status $?, press enter to exit]"; read prompt; echo done > "$FIFO"'
EOF
CMD="$*"
export FIFO CMD
screen -mc "$conf"
예를 들어 다음과 같이 사용하려면 :
that-script 'ls / /not-here'
아이디어는 수직 분할 레이아웃에서 두 개의 화면 창을 시작하는 임시 conf 파일로 화면을 실행한다는 것입니다. 첫 번째에서는 두 번째에 연결된 stderr로 명령을 실행합니다.
두 번째 창에 명명 된 파이프를 사용하여 tty 장치를 첫 번째 창에 전달하고 첫 번째 창에 명령이 완료되면 두 번째 창에 알려줍니다.
파이프 기반 접근 방식에 비해 다른 장점은 명령의 stdout 및 stderr이 여전히 tty 장치에 연결되어 있으므로 버퍼링에 영향을주지 않는다는 것입니다. 두 창 모두 독립적으로 위아래로 스크롤 할 수 있습니다 ( screen
의 복사 모드 사용).
bash
해당 스크립트를 사용하여 대화식으로 쉘을 실행 하면 프롬프트가 두 번째 창에 표시되고 쉘은 해당 쉘이 stderr에 프롬프트를 출력 할 때 첫 번째 창에 입력 한 내용을 읽습니다.
의 경우 bash
1, 에코 당신은 또한과 두 번째 창에 나타납니다 입력 한 내용의 에코 (의 경우 readline에 쉘에 의해 출력 bash
표준 오류에는)뿐만 아니라. 다른 쉘 등으로 ksh93
, 그것은 첫 번째 창에 (표시됩니다 에코 당신이 쉘을 넣어하지 않는 한, 상기 단말 장치 드라이버에 의해 출력이 아닌 쉘) emacs
또는 vi
와 모드 set -o emacs
나 set -o vi
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다