Mengapa hampir semua instruksi tentang menambahkan teks ke file sistem suka fstab
dan /etc/apt/sources.list.d/<name>.list
melibatkan penggunaan tee
dan echo
untuk menambahkan teks tersebut?
Ambil contoh berikut, yang dijalankan sebagai root :
## 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
Menjalankan diff -u file1 file2
tidak menghasilkan apa-apa; menjalankan md5sum file1 file2
show checksum mereka identik, yang membawa saya kembali ke pertanyaan awal saya:
Mengapa | tee <FILENAME>
begitu lazim di seluruh dokumen Ubuntu, apakah ini hanya praktik yang baik, jika tidak akan lebih mudah untuk hanya menggunakan contoh 2 daripada melewati output dari echo
ke tee
?
command-line
tee
Alexej Magura
sumber
sumber
Jawaban:
Ada perbedaan: tee menduplikasi output: ia mengirimkannya ke file dan ke tampilan.
Tetapi ada lagi:
Misalnya, jika Anda ingin menulis beberapa string menjadi dua file sekaligus, perintah dengan tee yang dapat Anda gunakan adalah:
Tee lain yang bisa membantu Anda adalah menghindari satu masalah saat menggunakan sudo. Operator pengalihan output normal selalu dijalankan dengan hak pengguna Anda, juga ketika Anda menulis sudo di depan perintah yang menghasilkan teks STDOUT. Dengan kata lain, ini akan gagal jika Anda tidak memiliki izin untuk menulis ke file itu:
Tapi dengan tee, semuanya akan berjalan dengan baik:
2 contoh dari situs ini . Ada lagi.
sumber
sudo
tanpatee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, semuanya menjadi berantakanecho "some text" | tee file1 file2 ... fileN
dan mungkin menambahkan> /dev/null
, jika Anda tidak ingin kekacauan di stdout.tee
mengambil masukan standar dan menulis ke kedua output stream standar serta file streaming. Jika itu membantu orang mengingat, nama perintah berasal dari T-splitter dalam pipa ledeng. Ada artikel Wikipedia yang bagus di mana saya belajar tentang asal usul nama perintah.sumber
Pertama-tama,
tee
itu sendiri tidak menambahkan teks, juga tidak>
.Ini
tee -a
dan pelengkapnya,>>
bahwa teks LAMPIRAN.Saya tidak percaya semua shell mendukung
>>
fungsinya, jadi itu sebabnyatee
lebih umum digunakan. (Pikirkan tua sajash
). Tee adalah perintah, sedangkan>>
operator.Jika Anda menggunakan (favorit pribadi saya)
bash
,>
dan>>
jauh lebih baik / lebih mudah.Menggunakan
tee
juga memungkinkan Anda untuk sudo HANYA perintah itu sehingga Anda tidak perlu sudo seluruh pernyataan, seperti padasudo sh -c "echo foo > bar"
.tee
juga memungkinkan Anda untuk membagi output. Tentu saja, semua ini bisa dilihat diman tee
. Ini terutama hanya preferensi pribadi Anda.Untuk bacaan lebih lanjut, lihat di sini dan di sini .
sumber
sudo somecommand >> filea
akan berjalansudo somecommand
dan kemudian, sebagai pengguna yang memanggil , tambahkan hasilnya kefilea
. Menggunakansudo sh -c "somecommand >> filea"
karya, tetapi dapat menyebabkan mimpi buruk yang bersarang-kutip. Menggunakansomecommand | sudo tee -a filea
menjalankansomecommand
sebagai pengguna yang memanggil, dan kemudian menambahkan outputfilea
sebagai root - yang biasanya apa yang diinginkan pengguna.