Tee kullanmanın herhangi bir önemi var mı?


47

Neden sistem dosyalarına metin ekleme ile ilgili tüm talimatlar bu metinleri kullanmayı ve eklemeyi sever fstabve /etc/apt/sources.list.d/<name>.listiçerir ?tee echo

Kök olarak çalışan aşağıdaki örnekleri alın :

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

Koşmak diff -u file1 file2hiçbir şey döndürmez; koşmak md5sum file1 file2onların sağlama toplamları aynı olduğunu gösterir, bu da beni asıl soruma döndürür:

| tee <FILENAME>Ubuntu dokümanlar arasında neden bu kadar yaygın, neden sadece iyi bir uygulama, yoksa çıktıyı echokendisinden geçirmek yerine sadece örnek 2'yi kullanmak kolay olmaz teemı?


1
Komutlarında sudo kaçırıyorsun; Bu 2 arasında farklı sonuçlar gösterecektir;)
Rinzwind

1
@ Rinzwind Bu komutları root olarak çalıştırıyorum.
Alexej Magura

Yanıtlar:


83

Bir fark var: tee çıktıyı çoğaltır: hem dosyaya hem de ekrana gönderir.

Ama dahası var:

  • Örneğin, aynı anda iki dosyaya bir string yazmak istiyorsanız, kullanabileceğiniz tee komutunu kullanabilirsiniz:

     echo "some text" | tee file1 > file2  
    
  • Başka bir şey tee size sudo kullanırken bir sorunu önlemek için yardımcı olabilir. Normal çıkış yönlendirme operatörü, STDOUT metnini oluşturan komutun önüne bir sudo yazdığınızda da daima kullanıcı ayrıcalıklarınızla yürütülür. Başka bir deyişle, bu dosyaya yazma izniniz yoksa bu başarısız olur:

     sudo echo "something" > bar  
    

    Ancak tee ile her şey yoluna girecek:

    echo "something" | sudo tee bar  
    

Bu siteden 2 örnek . Biraz daha var.


sudoOlmadan yapabilirsiniz tee- sudo sh -c 'echo SOMETHING > FILE'...;)
Wilf

7
Evet, @ wilf, ama tırnak almak gerektiğinde ", işler dağınık olur
Braiam

3
İlk durumda, N dosyalarına yazmak istiyorsanız, stdout'ta karışıklık istemiyorsanız tercih ederim echo "some text" | tee file1 file2 ... fileNve belki de > /dev/nulleklerim.
Elmar Zander

Nice @ElmarZander :)
Rinzwind

13

teestandart giriş akışını alır ve hem standart çıkış akışına hem de bir dosya akışına yazar. İnsanların hatırlamalarına yardımcı olursa, komut adı sıhhi tesisattaki bir T-splitter'dan gelir. Komut adının kökenini öğrendiğim güzel bir Wikipedia makalesi var .

görüntü tanımını buraya girin görüntü tanımını buraya girin


11

Öncelikle, teekendisi metin eklemiyor, ne de ekliyor >.

O tee -ave onun tamamlayıcısı, >>bu metin APPENDS.

Tüm mermilerin >>işlevi desteklediğine inanmıyorum , bu yüzden teedaha yaygın kullanılıyor. (Sadece eski düz düşünün sh). Tee bir emirdir, >>operatör ise.

Kullanırsanız (kişisel favorim) bash, >ve >>çok daha hoş / daha kolay.

Kullanımı teeda olduğu gibi, tüm ifadeyi sudo gerekmez böylece SADECE bu komutu sudo sağlar sudo sh -c "echo foo > bar". teeayrıca çıktıyı bölmenizi sağlar. Tabii ki, bunların hepsi içinde görülebilir man tee. Genelde sadece kişisel tercihiniz.

Daha fazla okumak için, buraya ve buraya bakın .


5
Bu bulgu herkes için ilgili açıklama "sudo SADECE o komutu", biraz karmaşık: Böyle bir formu kullanarak sudo somecommand >> fileaçalışır sudo somecommandve sonra olarak çağıran kullanıcıya, komuta etmek çıktı filea. sudo sh -c "somecommand >> filea"İşleri kullanmak , ancak iç içe alıntı kabuslara neden olabilir. Kullanılması somecommand | sudo tee -a fileakoşular somecommandsonra çağıran kullanıcı olarak ve çıktı ekler fileakök olarak - kullanıcı ne istediğini genellikle hangi.
Darael

@Darael Gönderiyi düzenledim. Açıklama yaptığınız için teşekkür ederiz.
Kaz Wolfe,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.