명령의 "티"

명령의 "티"

tee파이프 표준 입력을 표준 출력으로 리디렉션할 수 있습니다.그리고문서.

echo Hello, World! | tee greeting.txt

위 명령은 터미널 화면에 인사말을 표시하고 파일 내용에 저장 greeting.txt하거나, 해당 이름의 파일이 없으면 파일을 생성합니다.

덮어쓰는 대신 기존 파일에 추가하는 -a스위치 도 있습니다 .tee


파이프된 입력을 명령으로 리디렉션하고표준 출력파일 대신?

래퍼 스크립트를 만들려고 합니다.buku색인 번호로 지정된 북마크의 URL을 기본 선택 항목에 복사합니다.

# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION

여기서 나는 사용한다echo 먼저 터미널에 표시된 다음 기본 선택 항목(클립보드)에 저장됩니다.

나는 다음 명령(연결된 명령)을 전달하기 전에 출력을 표시하는 무언가 또는 바로가기를 상상합니다. echo $url | teeC xsel이를 통해 결과를 저장할 필요 없이 한 줄에 전체 명령을 연결할 수 있습니다.바꾸다다음과 같이:

buku -f 1 -p $1 | cut -f 2 | teeC xsel    

나도 쓸 수 있어urlview다음 명령을 사용하여 보기, 선택 및 열기 $BROWSER:

bukuc 10-20 | urlview

답변1

지원되는 쉘에서는 간단합니다.프로세스 교체, 예를 들어 배쉬

$ echo foo | tee >(xsel)
foo
$ xsel -o
foo

그렇지 않으면 FIFO를 사용할 수 있습니다(편의성은 부족하지만).

$ mkfifo _myfifo
$ xsel < _myfifo &
$ echo bar | tee _myfifo
bar
$ xsel -o
bar
[1] + Done                       xsel 0<_myfifo
$ 

답변2

"명령용 티"와 직접적인 유사점은 다음과 같습니다.peemoreutils의 명령( tee, 그러나 파이프 포함). 해당 인수는 경로가 아닌 실행 명령으로 사용되며 입력이 파일에 기록되지 않고 파이프로 전달됩니다. 모든 명령은 pee자체 표준 입력 으로 파이프됩니다 .

를 사용하면 실행하고 입력을 입력하도록 지시하여 pee원하는 결과를 얻을 수 있습니다.xselcat

echo foo | pee xsel cat

출력을 수행하기 위한 추가 cat프로세스가 있는 것은 사용 사례에서는 실제로 문제가 되지 않지만 다른 경우에는 이상적이지 않을 수 있습니다. 프로세스 교체와 달리 이는 모든 셸에서 작동하지만 물론 추가(아마도 덜 일반적인) 도구를 설치해야 합니다.

다음과 같이 인용하면 더 복잡한 명령을 내릴 수 있습니다 pee "xsel --display :1" cat. 이는 쉘 메타문자를 사용하여 실행되므로 sh주의해야 합니다.

관련 정보