Terima kasih atas help -m settipnya. Itu bekerja. Saya mencoba man setsebelum bertanya, namun di ubuntu adaNo manual entry for set
Ole
2
@Ole, setdibangun menjadi bash jadi jika man bashAnda dapat menemukannya di bagian SHELL BUILTIN COMMANDS. Saat melihat halaman manual Anda mungkin dapat melompat ke sana dengan mencari regexp ini: \bset \[.
User5910
Jawaban:
365
set -xmemungkinkan mode shell di mana semua perintah yang dieksekusi dicetak ke terminal. Dalam kasus Anda, ini jelas digunakan untuk debugging, yang merupakan kasus penggunaan umum untuk set -x: mencetak setiap perintah saat dijalankan dapat membantu Anda untuk memvisualisasikan aliran kontrol skrip jika tidak berfungsi seperti yang diharapkan.
Ini SANGAT bermanfaat! Saya berharap seseorang mengatakan kepada saya sebelumnya. Adakah trik lain yang menarik seperti ini yang dapat meningkatkan meta-skill kita dalam scripting?
Siswa
7
@Student: set -edi bagian atas skrip Anda akan membuat skrip keluar dengan kesalahan setiap kali terjadi kesalahan (dan tidak ditangani secara eksplisit). Saya menemukan bahwa jauh lebih disukai daripada default, yaitu untuk tetap mau mau tak mau (seperti Visual Basic terkenal On Error Resume Next).
John Zwinck
1
@JohnZwinck, sayangnya, set -ememiliki efek samping yang sangat tidak diinginkan, sampai-sampai membuat peninjauan kode hampir tidak mungkin (karena perilaku baris tertentu tergantung pada apa yang terjadi pada tumpukan panggilan - jika suatu fungsi dipanggil dalam konteks "diperiksa", set -edinonaktifkan untuk doa itu dan semua yang dipanggilnya). Lihat latihan di BashFAQ # 105 .
Charles Duffy
78
set -x
Mencetak jejak perintah sederhana, untuk perintah, perintah kasus, pilih perintah, dan aritmatika untuk perintah dan argumennya atau daftar kata yang terkait setelah diperluas dan sebelum dieksekusi. Nilai variabel PS4 diperluas dan nilai yang dihasilkan dicetak sebelum perintah dan argumen yang diperluas.
Contoh di atas menggambarkan penggunaan set -x. Ketika digunakan, ekspresi aritmatika di atas telah diperluas. Kita bisa melihat bagaimana garis menghanguskan telah dievaluasi langkah demi langkah.
Langkah pertama exprtelah dievaluasi.
Langkah kedua echotelah dievaluasi.
Untuk mengetahui lebih lanjut tentang set → kunjungi tautan ini
ketika datang ke skrip shell Anda,
["$DEBUG"=='true']&&set-x
Script Anda mungkin telah mencetak beberapa baris informasi tambahan ketika mode eksekusi dipilih sebagai DEBUG. Secara tradisional orang digunakan untuk mengaktifkan mode debug ketika skrip dipanggil dengan argumen opsional seperti-d
-u: dinonaktifkan secara default. Saat diaktifkan, pesan kesalahan ditampilkan saat menggunakan variabel yang tidak dikonfigurasi.
-v: tidak aktif secara default. Setelah aktivasi, konten asli dari informasi tersebut akan ditampilkan (tanpa resolusi variabel) sebelum informasi dikeluarkan.
-x: tidak aktif secara default. Jika diaktifkan, konten perintah akan ditampilkan sebelum perintah dijalankan (setelah resolusi variabel, ada simbol ++).
Bandingkan perbedaan berikut:
/# set -v && echo $HOME/root
/# set +v && echo $HOMEset+v && echo $HOME
/root
/# set -x && echo $HOME+ echo /root
/root
/# set +x && echo $HOME+set+x
/root
/# set -u && echo $NOSET/bin/sh: NOSET: parameter not set/# set +u && echo $NOSET
help -m set | less
help -m set
tipnya. Itu bekerja. Saya mencobaman set
sebelum bertanya, namun di ubuntu adaNo manual entry for set
set
dibangun menjadi bash jadi jikaman bash
Anda dapat menemukannya di bagian SHELL BUILTIN COMMANDS. Saat melihat halaman manual Anda mungkin dapat melompat ke sana dengan mencari regexp ini:\bset \[
.Jawaban:
set -x
memungkinkan mode shell di mana semua perintah yang dieksekusi dicetak ke terminal. Dalam kasus Anda, ini jelas digunakan untuk debugging, yang merupakan kasus penggunaan umum untukset -x
: mencetak setiap perintah saat dijalankan dapat membantu Anda untuk memvisualisasikan aliran kontrol skrip jika tidak berfungsi seperti yang diharapkan.set +x
menonaktifkannya.sumber
set +x
menonaktifkannya.set -e
di bagian atas skrip Anda akan membuat skrip keluar dengan kesalahan setiap kali terjadi kesalahan (dan tidak ditangani secara eksplisit). Saya menemukan bahwa jauh lebih disukai daripada default, yaitu untuk tetap mau mau tak mau (seperti Visual Basic terkenalOn Error Resume Next
).set -e
memiliki efek samping yang sangat tidak diinginkan, sampai-sampai membuat peninjauan kode hampir tidak mungkin (karena perilaku baris tertentu tergantung pada apa yang terjadi pada tumpukan panggilan - jika suatu fungsi dipanggil dalam konteks "diperiksa",set -e
dinonaktifkan untuk doa itu dan semua yang dipanggilnya). Lihat latihan di BashFAQ # 105 .set -x
[ sumber ]
Contoh
Contoh di atas menggambarkan penggunaan
set -x
. Ketika digunakan, ekspresi aritmatika di atas telah diperluas. Kita bisa melihat bagaimana garis menghanguskan telah dievaluasi langkah demi langkah.expr
telah dievaluasi.echo
telah dievaluasi.Untuk mengetahui lebih lanjut tentang set → kunjungi tautan ini
ketika datang ke skrip shell Anda,
Script Anda mungkin telah mencetak beberapa baris informasi tambahan ketika mode eksekusi dipilih sebagai
DEBUG
. Secara tradisional orang digunakan untuk mengaktifkan mode debug ketika skrip dipanggil dengan argumen opsional seperti-d
sumber
Bandingkan perbedaan berikut:
sumber