티 사용에 어떤 의미가 있습니까?


47

왜 같은 시스템 파일에 텍스트를 추가 관한 거의 모든 지침 즉 fstab/etc/apt/sources.list.d/<name>.list관련 사용 tee 하고 echo 추가 할 텍스트를했다?

루트 로 실행되는 다음 예제를 보자 .

## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2

Running diff -u file1 file2은 아무것도 반환하지 않습니다. running md5sum file1 file2은 체크섬이 동일하다는 것을 보여 주며 원래 질문으로 돌아갑니다.

| tee <FILENAME>우분투 문서 에서 그렇게 널리 퍼져 있습니까? 좋은 습관 입니까? 그렇지 않으면 출력을에서 echo로 전달하는 대신 예제 2를 사용하는 것이 더 쉽지 tee않습니까?


1
명령에 sudo가 없습니다. 그것은 2 사이에 다른 결과를 보여줄 것이다;)
Rinzwind

1
@Rinzwind이 명령을 루트로 실행하고 있습니다.
Alexej Magura

답변:


82

차이점은 티가 출력을 복제하는 것입니다. 파일과 디스플레이로 출력을 보냅니다.

그러나 더 많은 것이 있습니다 :

  • 예를 들어, 한 번에 두 개의 파일에 문자열을 쓰려면 tee 명령을 사용할 수 있습니다.

     echo "some text" | tee file1 > file2  
    
  • 티가 당신을 도울 수있는 또 다른 것은 sudo를 사용할 때 하나의 문제를 피하는 것입니다. STDOUT 텍스트를 생성하는 명령 앞에 sudo를 작성할 때도 일반 출력 리디렉션 연산자는 항상 사용자 권한으로 실행됩니다. 즉, 해당 파일에 쓸 수있는 권한이 없으면 실패합니다.

     sudo echo "something" > bar  
    

    그러나 티와 함께라면 모든 것이 잘 될 것입니다.

    echo "something" | sudo tee bar  
    

이 사이트의 2 가지 예 . 좀 더 있습니다.


당신은 할 수 sudo없이 tee- sudo sh -c 'echo SOMETHING > FILE'...;)
윌프

7
@ wilf 그래,하지만 당신이 따옴표를 출력해야 할 때 "상황이 지저분해진다
Braiam

3
당신이 N 파일을 작성하려는 경우 첫 번째 경우에는, 내가 선호 echo "some text" | tee file1 file2 ... fileN어쩌면 APPEND와 > /dev/null당신이 표준 출력에 혼란을하지 않으려면.
Elmar Zander

@ElmarZander 좋은 것 :)
Rinzwind

13

tee표준 입력 스트림을 가져 와서 표준 출력 스트림과 파일 스트림 모두에 씁니다 . 사람들이 기억하는 데 도움이된다면 명령 이름은 배관의 T 스플리터에서 나옵니다. 명령 이름의 기원에 대해 배운 멋진 Wikipedia 기사 가 있습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


11

우선, tee그 자체는 텍스트를 추가하지도 않습니다 >.

그것은 텍스트를 tee -a보완 >>하는 것입니다.

모든 쉘이 >>함수를 지원한다고 생각하지 않으므로 tee더 일반적으로 사용됩니다. (오래된 평범한 생각 sh). Tee는 명령이고 >>연산자는입니다.

당신이 (내 개인적으로 좋아하는) bash을 사용 >하고 >>훨씬 좋고 더 쉽습니다.

를 사용하면 tee해당 명령을 그냥 sudo 할 수 있으므로 에서처럼 전체 문장을 sudo하지 않아도됩니다 sudo sh -c "echo foo > bar". tee또한 출력을 분할 할 수 있습니다. 물론이 모든 것을에서 볼 수 있습니다 man tee. 주로 개인적인 취향입니다.

자세한 내용은 herehere을 참조 하십시오 .


5
이 찾는 사람을위한에 대한 설명 "sudo는 단지 명령"조금 복잡한 : 같은 양식을 사용하여 sudo somecommand >> filea실행 sudo somecommand한 후 그리고, 같은 호출 사용자 추가하려면 출력 filea. sudo sh -c "somecommand >> filea"작품을 사용 하지만 중첩 인용 악몽이 발생할 수 있습니다. 호출 사용자로 somecommand | sudo tee -a filea실행 somecommand을 사용한 다음 출력을 filea루트로 추가합니다 . 일반적으로 사용자가 원하는 것입니다.
Darael

@Darael 게시물을 편집했습니다. 설명해 주셔서 감사합니다.
Kaz Wolfe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.