Bagaimana cara men-debug penyelesaian bash?


14

Saya telah membuat beberapa fungsi penyelesaian bash yang semuanya tampaknya berfungsi secara terpisah, tetapi memberi saya hasil yang tidak terduga ketika saya mencoba untuk menyelesaikannya.

Apakah mungkin untuk menghubungkan bashdb, kemudian mencoba untuk menyelesaikan sesuatu dan melangkah untuk men-debug dan menentukan apa yang salah?


2
Hanya untuk menambahkan saya ke sen: Anda harus menggunakan set -xbash di untuk men-debug skrip Anda. Gunakan set +xuntuk menonaktifkan.

Jawaban:


6

set -x

Jika Anda set -xbaik dalam sesi interaktif atau skrip autocomplete itu sendiri, (hampir?) Setiap perintah dan hasilnya akan dicetak. Ini termasuk pekerjaan yang dilakukan di dalam skrip autocomplete.

Ini kemudian dapat kembali tenang dengan set +x.

-x

Setelah memperluas setiap perintah sederhana, untuk perintah, perintah kasus, pilih perintah, atau aritmatika untuk perintah, menampilkan nilai PS4 yang diperluas, diikuti oleh perintah dan argumen yang diperluas atau daftar kata yang terkait.

-dari manual Bash #The Set Builtin


2

Hanya log / output dari fungsi bash completion; karena mereka kemungkinan besar bukan ilmu roket, ini seharusnya cukup mudah dilakukan. Mungkin saja untuk menghubungkan bashdb, tetapi rasanya tidak perlu ...


Menghubungkan bashdb akan jauh lebih sederhana dan, saya harapkan, lebih cepat daripada menambahkan pernyataan log ke skrip. Namun, saya tidak tahu apakah itu mungkin, dan kurangnya jawaban akan menyarankan itu tidak mungkin. Saya berhasil memecahkan masalah saya dengan mencatat kondisi seperti yang Anda sarankan, tetapi mengeluarkan informasi pencatatan ke terminal tidak membantu ketika bekerja dengan penyelesaian.
Dan Midwood

3
@DanMidwood: Gunakan dua terminal (mis. Layar + split). Di satu, jalankan penyelesaian, di kedua, tail -flog.
choroba

@ choroba: Bagus. : D
Tamara Wijsman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.