Ingin memperbaiki pertanyaan ini? Tambahkan detail dan klarifikasi masalahnya dengan mengedit postingan ini.
Ditutup 4 tahun yang lalu.
Perbaiki pertanyaan ini
Setelah menemukan sekitar 3 tee
penjelasan yang saya anggap tidak mendidik, saya akan meminta penjelasan yang sederhana, umum, dan bertahap (jika mungkin) tentang perintah ini, yang ditujukan untuk pendatang baru Linux.
Saya mengerti bahwa kami menggunakannya baik melalui pipa, pada stdout perintah, atau sebagai alternatif, langsung ke file tertentu, tetapi saya rasa saya melewatkan apa yang sebenarnya dilakukan perintah dengan konten ini dan kapan itu berguna.
Jadi, inilah yang saya tanyakan, berharap menemukan penjelasan didaktik, disajikan kepada pendatang baru dengan cara yang jelas dan bertahap:
-
Bagaimana cara kerja perintah dengan stdout perintah, atau sebagai alternatif, file itu sendiri?
-
Mengapa umum untuk mengatakan
tee
membaca input standar? Maksud saya, jika saya melakukanls -l
,tee
tidak membaca sintaksls -l
itu sendiri melainkan stdout yang dicetak ke dalam sesi.
Juga, jika Anda mau, silakan bagikan contoh praktis dari pekerjaan sehari-hari Anda tentang kapan tee
sangat berguna bagi Anda?
Jawaban yang Diterima:
Dari tee
manual di sistem saya:
Utilitas tee menyalin input standar ke output standar, membuat salinan
dalam nol atau lebih file. Outputnya tidak buffer.
Jadi, ia membaca dari input standar dan menyalinnya ke output standar, dan saat melakukannya juga menduplikasi aliran menjadi satu atau beberapa file.
Dalam pipa berikut, tee
akan mengambil output dari perintah pertama di pipeline dan menyalinnya ke output standar (terminal) sambil juga membuat salinannya di file one
, two
dan three
:
$ somecommand | tee one two three
tee
memiliki banyak kegunaan, salah satunya adalah dalam hubungannya dengan sudo
untuk mengarahkan output ke file yang dimiliki oleh root:
$ somecommand | sudo tee /root/somefile >/dev/null
Berikut ini akan tidak telah berfungsi sejak pengalihan terjadi sebagai pengguna yang tidak memiliki hak (itu juga akan menjalankan somecommand
sebagai root yang mungkin tidak diinginkan):
$ sudo somecommand >/root/somefile
Contoh buatan untuk menambahkan kumpulan baris tetap ke banyak file sekaligus (untuk semua pengguna ~/.profile
file, dengan asumsi bahwa *
diperluas ke nama pengguna dan baris perintah yang diperluas tidak menjadi terlalu panjang untuk ditangani oleh shell):
$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH
Contoh nyata penggunaan tee
:
time doas box-build.sh 2>&1 | tee build.out | grep '^=*>'
Ini saya membangun sistem dasar OpenBSD. doas
adalah "setara" OpenBSD dari sudo
dan box-build.sh
adalah skrip shell kecil yang melakukan pembangunan (pada dasarnya cd /usr/src && make obj && make build
). Saya ingin menyimpan output dari keseluruhan proses pembuatan, termasuk kesalahan atau peringatan apa pun, tetapi saya tidak ingin semuanya keluar ke terminal saya. Untuk tujuan ini saya menggunakan tee
untuk menyimpan semuanya ke build.out
lalu grep
hanya untuk mendapatkan petunjuk di mana dalam proses kita berada di terminal.