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?)