답변:
다음은 POSIX
표준 을 준수한다고 가정하고 모든 Unix / Linux 구현에서 작동하는 솔루션입니다 . 유닉스가 아닌 일부 환경 cygwin
에서도 작동합니다 .
echo 'ee' | tee /dev/tty | foo
참조 : Open Group Base 사양 Issue 7 IEEE Std 1003.1, 2013 Edition, §10.1 :
/ dev / tty
해당 프로세스의 프로세스 그룹과 연관됩니다 (있는 경우). 출력이 재 지정된 방식에 관계없이 터미널에 메시지를 쓰거나 터미널 에서 데이터를 읽으 려는 프로그램 또는 쉘 프로 시저에 유용합니다 . 또한 형식화 된 출력이 필요할 때 현재 사용중인 터미널을 찾는 것이 번거로운 경우 출력을 위해 파일 이름을 요구하는 응용 프로그램에도 사용할 수 있습니다. 각 프로세스에서 제어 터미널의 동의어
Google Colab과 같은 일부 환경 에서는 사용 가능한 장치를 반환하는 명령 을 실행 /dev/tty
하면서 구현하지 않는 것으로보고되었습니다 tty
. 해결 방법은 다음과 같습니다.
tty=$(tty)
echo 'ee' | tee $tty | foo
또는 고대 Bourne 껍질로 :
tty=`tty`
echo 'ee' | tee $tty | foo
/dev/tty
는 필수 유닉스 장치입니다. BSD 감옥에서 달리고 있습니까?
tee
과 같이 계단식으로 배열 할 수 있습니다 : cat some.log | tee /dev/tty | tee -a other.log | grep -i 'foo' >> foo.log
1) 콘솔에 모두 가져 오기, 2) 다른 파일에 모두 추가, 3) 다른 파일에 foo
줄 가져 오기 .
/dev/tty
없지만 출력 tty
은 사용할 수 있습니다.
foo
는 프로세스 대체의 일부 여야 한다고 생각합니다 . 예를 들면 다음과 같습니다.echo 'ee' | tee file.txt >(wc -c | tr -d ' ')
echo 'ee' | tee >(cat) | foo | bar
.
일부 시스템에서는 "/ dev / stdout"에 대한 액세스가 거부되었지만 사용자 터미널에 대한 액세스는 "/ dev / tty"에 의해 제공됩니다. "foo"에 "wc"를 사용하면 위 예제는 다음과 같이 작동합니다 (Linux, OSX 등에서).
% echo 'Hi' | tee /dev/tty | wc Hi 1 1 3
일치하는 파일 목록의 맨 아래에 개수를 추가하려면 다음과 같이 사용하십시오.
% ls [A-J]* | tee /dev/tty | wc -l
이 모든 것을 기억하지 않으려면 별칭을 정의합니다.
% alias t tee /dev/tty
% alias wcl wc -l
간단하게 말할 수 있도록
% ls [A-J]* | t | wcl
POSTSCRIPT : 발음이 "titty"로 쓰러 질 수있는 더 어린 세트의 경우, "tty"는 한때 "teletype"터미널의 일반적인 약어라고 덧붙였습니다. 붙어.
먼저 화면과 관련된 터미널 (또는 출력을 표시하려는 화면)을 알아야합니다.
tty
그런 다음 출력을 해당 터미널에 티잉하고 다른 사본을 foo 프로그램을 통해 파이프 할 수 있습니다.
echo ee | tee /dev/pty/2 | foo
t
쓸모가 없습니다. 사용할 수는 echo ee | tee $(tty) | foo
있지만 여전히 쓸모없는 명령이 있습니다 (tty
실제로 /dev/tty
작동 한다는 점에서 )이 있습니다.
echo 'ee' | tee /dev/stderr
사용자의 경우 작품,하지만 그래서 "화면의" 요구 사항이 너무 stderr에 의해 만족, 즉 할 수 있습니다.