aku mengerti itu dash
adalah shell "model" - itu ditulis baru-baru ini dan baik dan itu hanya mengimplementasikan apa yang diperlukan dari shell POSIX. Saya melihat kode sumber dasbor untuk memahami bagaimana "melacak" suatu program seperti shell, dilakukan.
"Tracing" dari dasbor dilakukan dengan mengompilasinya dengan DEBUG
didefinisikan dan dipanggil dengan -o debug
. Ketika Anda melakukannya, sebuah file trace
dibuka dengan fopen
informasi yang dibuang tentang apa dash
lakukan saat dijalankan.
Kecuali seluruh mekanisme, menurut saya, tidak bekerja, bahkan dalam cangkang "ditulis dengan sempurna" ini. Jika saya memiliki ini dalam skrip shell:
exec 3>&1
segera semua informasi setelah itu, sangat mungkin tidak lagi dibuang ke file trace
tapi berakhir stdout
. Itu karena fopen
panggilan open
dan itu kemungkinan mengembalikan file descriptor 3.
Ini bukan contoh yang dibuat-buat. Ada skrip yang biasa digunakan di dunia nyata yang memiliki garis seperti
exec
jumlah >&1
(Saya melihat itu di 2 autotool configure
skrip: untuk perangkat lunak IP Infusion dan Kerberos).
Jadi bagaimana sebuah shell dapat di-debug / dilacak, ketika harus menjalankan skrip seperti ini?
(Saya tidak mencari alat di luar shell - Saya ingin tahu apa cara yang benar untuk melacak, di dalam program seperti shell. Atau apakah itu tidak mungkin secara umum?)
Jawaban:
Anda bisa menggunakan soket ( syslogd melakukan ini misalnya). Tapi kemudian bagaimana Anda melindungi terhadap perintah suka
Atau Anda bisa menggunakannya
dup2
untuk mengubah deskriptor file ke nomor yang lebih tinggi. Tapi itu bukan jaminan, mungkin hanya perlindungan terhadap kesalahan skrip (seperti menggunakan 3 alih-alih 2 dalam pengalihan).Jika skrip ingin mengubah perilaku penelusuran dengan sengaja, saya yakin tidak banyak yang bisa dilakukan shell.
sumber
dup2
untuk "deskriptor file angka ajaib" mungkin yang terbaik bertaruh ...