명령을위한`tee`


15

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

3
시도 tee /dev/tty하거나 tty0(정확히 기억하지
마십시오

2
info tee프로세스 대체 및 파이프 티의 출력을 프로그램에 대해 언급합니다.
Xen2050

답변:


19

프로세스 대체 를 지원 하는 쉘에서 간단합니다 ( 예 : bash)

$ 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
$ 

감사! 내가 언급 한 두 가지 : 1. sh(Bourne shell)은이 기능을 지원하지 않습니다. 2. >()프로세스 대체를 위해 화살표는 단일 연산자의 일부로 붙어 있어야합니다.

11

"명령에 티"의 직접적인 아날로그는이다 peemoreutils에서 명령 ( tee그러나 파이프). 인수는 경로가 아닌 실행 명령으로 사용되며 입력을 파일에 쓰지 않고 파이프로 보냅니다. 모든 명령에는 사용자가 파이프 한 표준 입력이 제공 pee됩니다.

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

echo foo | pee xsel cat

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

다음과 같이 인용하여 더 복잡한 명령을 제공 할 수 있습니다 pee "xsel --display :1" cat. 그것들은으로 실행 sh되므로 쉘 메타 문자에주의해야합니다.


4
아주 멋지다 – 그것에 대해 몰랐다
스틸 드라이버

2
그건 ... 좋은 이름이 아닙니다.
David Richerby 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.