Apa arti argumen '-v' dan '-x' untuk di-bash?

17

Saya telah melihat beberapa skrip shell dengan shebang berikut:

#!/bin/bash -x -v 

Namun, man bashtidak menjelaskan apa argumen ini -xdan -vberdiri untuk, jika mereka milik bashsemua.

Jadi apa artinya itu -xdan -v(dan kemungkinan argumen lainnya)?

Alex
sumber

Jawaban:

26

Dari man bash(ya, ini adalah halaman besar, biasanya pencarian Google lebih cepat):

-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.

Efektif: ketika Anda menjalankan skrip, itu akan menunjukkan semua tindakan yang dilakukan dalam skrip itu. Jadi semua seandainya, loop dan perintah berjalan. Sangat berguna untuk debugging.

-v Cetak baris input shell saat dibaca. Ketika skrip dijalankan, skrip akan mencetak seluruh skrip saat membaca file. Ketika Anda menggunakan shell secara interaktif, itu akan menampilkan setiap perintah setelah Anda menekan enter.

Kutipan di atas berasal dari penjelasan setperintah builtin di man bash, yang juga menjelaskan bahwa opsi untuk setdapat juga diteruskan sebagai argumen (pada baris shebang):

Opsi tidak aktif secara default kecuali jika dinyatakan lain. Menggunakan + daripada -menyebabkan opsi ini dimatikan. Opsi juga dapat ditentukan sebagai argumen untuk doa shell. Set opsi saat ini dapat ditemukan di $-. Status pengembalian selalu benar kecuali ada opsi yang tidak valid.

mtak
sumber
Ok, jadi ini adalah argumen sederhana untuk bash, dan saya mungkin memiliki versi berbeda tanpa argumen ini?
Alex
Jika Anda berbicara tentang bash: Saya pikir semua rilis bash dalam dekade terakhir akan mendukung argumen ini. Jika Anda berbicara tentang halaman manual: ini sangat besar dan Anda perlu tahu apa yang Anda cari, tetapi itu ada di sana (setidaknya di Ubuntu 13.04). Biasanya pencarian Google lebih cepat.
mtak
6
+1 "Pencarian Google lebih cepat" -> /-xbeberapa kali akan membawa Anda ke sana man(sebenarnya, ini less). Anda dapat mengulangi pencarian terakhir dengan /tanda panah + ke atas, tetapi Anda harus membuka halaman ke bawah untuk mendapatkan pencarian saat ini dari layar ( /pencarian maju, ?mundur).
goldilocks
2
@ TAFKA'goldilocks 'Saya kira itu tergantung pada distro Anda. Di halaman manual Ubuntu 13.04 bash hit ke-43 adalah yang benar. Lebih mudah untuk mencari hit berikutnya dalam waktu kurang dengan menggunakan nuntuk pencarian maju dan Nuntuk pencarian mundur.
mtak
Ups, sebenarnya saya sedang melihat di test -xbawah EKSPRESI KONDISI (hit ketiga), tidak set -x. -xdiman bash adalah kasus yang sangat buruk sehingga mendapatkan bantuan yang lebih spesifik: Jika Anda menggunakan /^\s+-x\b, (= mulai dari baris + spasi + -x+ batas kata) Anda mendapatkan yang benar dalam 5 hit ... itu akan menjadi 4 tetapi untuk fakta xcocok X... yang membawa saya ke pertanyaan yang ingin saya tanyakan . Ngomong-ngomong, di sebagian besar halaman manual ^\s+-x\bpolanya harus bekerja terlebih dahulu untuk sakelar.
goldilocks
2

Halaman bash man memang mengisyaratkan bahwa opsi ini dijelaskan lebih jauh ke bawah, sebenarnya, tetapi mudah diabaikan.

Karenanya masalah Anda sebenarnya harus dibaca: Bagian OPSI dari halaman bash man tidak lengkap. Jawabannya adalah untuk menduplikatnya, atau menyorot bagian pertama dari bagian OPSI:

OPTIONS
   All  of  the  single-character shell options documented in the descrip‐
   tion of the set builtin command can be used as options when  the  shell
   is invoked.  [ ... ]

Akhirnya, untuk melengkapi ini: mereka adalah opsi standar untuk setiap shell POSIX untuk menunjukkan kode skrip ketika dibaca ( -v) dan ketika dijalankan ( -x). Output akan muncul di stderr.

Henk Langeveld
sumber