Kirim salinan hasil skrip ke file

10

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 STDOUTke log.txt, tetapi bagaimana jika saya ingin juga dapat melihat output di terminal?

Saya telah membaca tentang teedan MULTIOSopsi 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.txtsepertinya tidak menangkap semuanya (bahkan hampir tidak menangkap apa-apa).

Amelio Vazquez-Reina
sumber
./my_script.sh > log.txt 2>&1
mikeserv
Sepertinya Anda sedang mencari scriptperintah. Atau mungkinmyscript >&1 > log.txt 2>&1
Stéphane Chazelas

Jawaban:

12

Bisa jadi skrip Anda menghasilkan output ke stdoutdan stderr, dan Anda hanya mendapatkan salah satu dari stream stream ke file log Anda.

./my_script.sh | tee log.txtmemang akan mengeluarkan semuanya ke terminal, tetapi hanya akan membuang stdoutke 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:

./myscript.sh 2>&1 | tee log.txt

Ini mengalihkan stderr( 2) ke stdout( 1), kemudian pipa stdoutke tee, yang menyalinnya ke terminal dan ke file log.

The zshmultios setara akan menjadi:

./myscript.sh >&1 > log.txt 2>&1

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 ke teeproses seperti internal ).

savanto
sumber
Terima kasih - Mengenai baris terakhir Anda, mengapa tidak ./myscript.sh >&1 2>&1 > log.txt? (Yaitu beralih urutan dari dua pengalihan terakhir). Apakah akan ada perbedaan di antara mereka?
Amelio Vazquez-Reina
Varian Anda tidak ditampilkan stdout, hanya untuk log.txt. Baris terakhir dalam jawaban (ditambahkan oleh @ StéphaneChazelas dan bukan saya sendiri) keluaran untuk keduanya.
savanto
0

nohup memungkinkan pekerjaan untuk dijalankan walaupun konsol mati atau ditutup, berguna untuk cadangan yang panjang dll, tetapi di sini kita menggunakan pencatatan otomatisnya.

nohup myscript.sh & ; tail -f nohup.out
zzapper
sumber