Apakah ada cara mudah untuk mencatat semua aktivitas yang dilakukan oleh shell script?

18

Apakah ada cara mudah untuk mencatat semua aktivitas yang terjadi dari skrip shell ke file?

Saya punya skrip. Ini output hal-hal seperti "instruksi" gema, serta output program lainnya. Saya tahu perintahnya:

command | tee -a "$log_file"

dan

command >> logifle.log

Yang saya tanyakan adalah apakah ada parameter shell untuk logging, atau perintah set yang bisa saya gunakan atau sesuatu seperti itu. Saya tidak perlu ingin menambahkan puluhan arahan ulang atau tee ke file jika saya tidak perlu. Saya masih ingin mendapatkan output std - Saya hanya juga ingin login .:wq

j0h
sumber
5
LOL
,:
1
itu mengejutkan pikiran saya bahwa kebanyakan orang tampaknya melakukan itu alih-alih: x
Minta maaf dan mengembalikan Monica

Jawaban:

18

jika Anda biasanya menjalankan skrip Anda foo.sh, coba jalankan (anggap itu skrip bash) bash -x foo.sh. Jika Anda ingin semuanya diarahkan ke file, coba bash -x foo.sh > file.log 2>&1(perhatikan saya juga mengarahkan stderr, hapus 2>&1jika Anda tidak menginginkan ini). Jika Anda juga ingin melihat apa yang terjadi bash -x foo.sh 2>&1 | tee log.file,.

roadmr
sumber
20

Ada cara yang sangat mudah dan praktis:

Menggunakan scriptuntuk membuat naskah sesi terminal

  1. Mulai perintah script

    Jika argumen filediberikan, misalnya script ~/tmp/output, scriptsimpan dialog di file ini. Jika tidak ada nama file yang diberikan, dialog disimpan dalam filetypescript

  2. Mulai skrip Anda atau apa pun yang ingin Anda mulai

  3. Jika skrip Anda selesai, berhenti scriptmelalui Ctrl-D

  4. Periksa output di file output default typescript


Untuk memulai perintah Anda dalam satu langkah script, gunakan parameter-c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

Penggunaan scriptdi dalam skrip Anda tidak masuk akal karena scriptmemecah shell atau memulai shell baru.

Jika variabel SHELL ada, shell yang bercabang dengan skrip akan menjadi shell itu. Jika SHELL tidak disetel, shell Bourne diasumsikan. (Kebanyakan shell mengatur variabel ini secara otomatis).

AB
sumber
4
@ Fabby saya suka jawaban saya, tapi saya tidak melihat hal kelabu kecil;)
AB
Saya menggunakan script logfilename, jadi saya bisa mengambilnya.
waltinator
dapatkah saya memanggil "skrip" dari program shell saya?
j0h
1
Ini tidak masuk akal, lihat jawaban saya yang lebih baik.
AB
1
+1. Terima kasih atas jawaban ini :-) scriptbermanfaat juga pemantauan melalui fifo. Dari man script: " -f, --flushKeluarkan output setelah setiap penulisan. Ini bagus untuk operasi telecenter: satu orang melakukannya mkfifo foo; script -f foo, dan yang lain dapat mengawasi secara real-time apa yang sedang dilakukan menggunakan cat foo". Hal ini juga dapat digunakan untuk memantau ketika suatu program sedang menunggu input atau dilakukan misalnya dengan memantau stempel waktu fifo.
sudodus