Bagaimana cara mengarahkan output standar ke beberapa file log? Berikut ini tidak berfungsi:
some_command 1> output_log_1 output_log_2 2>&1
linux
io-redirection
tee
doubledecker
sumber
sumber
zsh
, Anda bisa menggunakannyasome_command >output_log_1 >output_log_2
.Jawaban:
Lihat
man tee
:Demikian:
sumber
cmd 2>&1 | tee log1 log2
saya mencoba menjalankan seperti di atas, tetapi saya perlu menekan ctrl-c untuk mengarahkannya ke file log kedua. juga hasilnya dicetak pada konsol. Saya ingin output perintah dialihkan ke log tetapi tidak di konsol. bantuan apa pun dihargai.tee
Perintah menulisstdin
ke file dan juga kestdout
. Jika Anda tidak ingin output muncul di terminal, Anda harus mengarahkan ulang/dev/null
seperti biasanya.echo test | tee --append file1 file2
Katakanlah output Anda dihasilkan dari suatu fungsi
cmd()
,:Untuk mengalihkan output dari
cmd
ke dua file, tetapi tidak ke konsol, Anda dapat menggunakan:Ini akan berfungsi untuk banyak file, mengingat pemipaan sumber data apa pun ke tee:
Ini juga akan berfungsi:
Tanpa
/dev/null
pengalihan, tee akan mengirim output ke stdout di samping file yang ditentukan.Misalnya, jika ini dijalankan dari konsol, Anda akan melihat hasilnya di sana. Jalankan dari crontab, output akan muncul pesan status yang dikirimkan kepada Anda (juga lihat jawaban Gilles di sini https://unix.stackexchange.com/a/100833/3998 ).
Ini bekerja untuk saya di bash di Ubuntu 12.04, dan telah diverifikasi di Ubuntu 14.04 menggunakan GNU bash 4.3.11 (1), jadi itu harus bekerja pada versi bash GNU baru-baru ini.
sumber
version 4.3.11(1)-release (i686-pc-linux-gnu)
) di Ubuntu 14.04.Itu posting lama tapi saya baru menemukannya sekarang ...
Alih-alih mengarahkan output ke
> /dev/null
Anda dapat mengarahkan kembali ke file terakhir:Atau untuk menambahkan output:
sumber
-a
tee)Seperti @jofel disebutkan dalam komentar di bawah jawaban, ini dapat dilakukan secara native di
zsh
:atau, dengan ekspansi brace:
Secara internal ini bekerja sangat mirip dengan
tee
jawaban yang diberikan di atas. Shell menghubungkan stdout perintah ke proses yang menyalurkan ke beberapa file; Oleh karena itu, tidak ada keuntungan teknis kuat untuk melakukannya dengan cara ini (tetapi tidak terlihat baik nyata). Lihat yangzsh
pengguna untuk lebih.sumber
Namun, tidak dapat berkomentar, cara lain untuk mengekspresikan
Bisa disederhanakan untuk ini, ketika berhadapan dengan banyak file.
sumber
file1
melaluifile8
sebagai nama mereka dan mereka cenderung hanya contoh placeholder untuk nama-nama fileSaya membutuhkan file log sesi dan file lain untuk semua sesi yang saya lakukan:
echo blabla |tee thisession >>allsessions
sumber
tee
perintah telah disebutkan.