Katakanlah saya memiliki skrip Zsh dan saya ingin membiarkannya mencetak keluaran STDOUT
, tetapi juga menyalin (membuang) hasilnya ke file dalam disk.
Selain itu, skrip dimulai dengan opsi berikut
set -o xtrace
yang memaksanya menjadi verbose dan mencetak perintah apa yang dijalankannya. Saya ingin menangkap output ini juga dalam file di disk.
Pemahaman saya adalah jika saya melakukannya
./my_script.sh > log.txt
itu hanya akan mengirim STDOUT
ke log.txt
, tetapi bagaimana jika saya ingin juga dapat melihat output di terminal?
Saya telah membaca tentang tee
dan MULTIOS
opsi di Zsh, tetapi saya tidak yakin bagaimana menggunakannya.
Ketika saya melakukannya:
./my_script | tee log.txt
Saya dapat melihat output di terminal, tetapi file tersebut log.txt
sepertinya tidak menangkap semuanya (bahkan hampir tidak menangkap apa-apa).
sumber
./my_script.sh > log.txt 2>&1
script
perintah. Atau mungkinmyscript >&1 > log.txt 2>&1
Jawaban:
Bisa jadi skrip Anda menghasilkan output ke
stdout
danstderr
, dan Anda hanya mendapatkan salah satu dari stream stream ke file log Anda../my_script.sh | tee log.txt
memang akan mengeluarkan semuanya ke terminal, tetapi hanya akan membuangstdout
ke logfile../my_script.sh > log.txt 2>&1
akan melakukan yang sebaliknya, membuang semuanya ke file log, tetapi tidak menampilkan apa pun di layar.Caranya adalah dengan menggabungkan keduanya dengan
tee
:Ini mengalihkan
stderr
(2
) kestdout
(1
), kemudian pipastdout
ketee
, yang menyalinnya ke terminal dan ke file log.The
zsh
multios setara akan menjadi:Yaitu, redirect stdout baik ke stdout asli dan log.txt (secara internal melalui pipa ke sesuatu yang bekerja seperti
tee
), dan kemudian arahkan stderr ke itu juga (ke pipa ketee
proses seperti internal ).sumber
./myscript.sh >&1 2>&1 > log.txt
? (Yaitu beralih urutan dari dua pengalihan terakhir). Apakah akan ada perbedaan di antara mereka?stdout
, hanya untuklog.txt
. Baris terakhir dalam jawaban (ditambahkan oleh @ StéphaneChazelas dan bukan saya sendiri) keluaran untuk keduanya.nohup memungkinkan pekerjaan untuk dijalankan walaupun konsol mati atau ditutup, berguna untuk cadangan yang panjang dll, tetapi di sini kita menggunakan pencatatan otomatisnya.
sumber