GNU/Linux >> Belajar Linux >  >> Linux

Meneruskan opsi ke suatu program:apa konvensi untuk satu tanda hubung vs dua?

Yang paling umum adalah GNU getopt gaya, dengan satu garis putus-putus untuk opsi pendek dan dua garis putus-putus untuk opsi panjang.

  • Awalnya, program Unix menggunakan opsi satu huruf yang didahului dengan satu tanda hubung dan secara opsional dipaketkan:

    ls -laF
    
    ls -l -a -F
    

    Kedua perintah di atas sama.

    Saat sebuah opsi mengambil nilai, opsi tersebut mengesampingkan bundling:Di gpg -aofoo.gpg , -a dan -o adalah opsi dan foo.gpg adalah nilai yang diberikan ke -o .

  • Kebanyakan dari mereka melakukannya.

    tar cvzf adalah pemandangan umum. Versi saat ini menerima tar -cvzf juga, dan bergantung pada apakah Anda menambahkan tanda hubung, argumen akan ditafsirkan dengan cara yang sangat berbeda. Misalnya, keduanya memiliki arti yang sama (perhatikan bagaimana opsi dashless tidak tepat sebelum nilainya):

    tar -xf file.tgz -vzO /etc/passwd /var/backups
    
    tar xfvzO file.tgz /etc/passwd /var/backups
    

    BSD ps selalu menggunakan -; SysV ps tidak pernah. Versi Linux menerima kedua versi dan mengubah perilakunya tergantung pada apakah suatu opsi diawali dengan tanda hubung. (Tidak seperti contoh tar di atas, ps mengubah opsi makna juga.)

  • Program X11 menggunakan opsi panjang yang diawali dengan tanda hubung tunggal atau terkadang tanda plus:

    xterm -class FooTerm +vb -u8
    

    Ini menetapkan opsi class dan u8 , dan tidak disetel vb opsi.

    Gaya X11 tidak kompatibel dengan pengelompokan opsi.

  • Belakangan, opsi panjang ditambahkan ke GNU getopt() dengan cara yang kompatibel dengan opsi satu huruf.

    gpg -se --no-armor --output=signed.gpg
    

    Ini menetapkan -s , -e , dan --no-armor (yang berlawanan dengan --armor ).

    Biasanya, --output=signed.gpg dan --output signed.gpg setara. (Tapi tidak selalu – misalnya curl tidak menerima yang pertama, hanya yang terakhir.)

    (Jika saya ingat dengan benar, opsi panjang menggunakan + sebagai awalan sebelum diubah menjadi -- .)

  • Spesifikasi POSIX memiliki bagian Sintaks Argumen Utilitas, yang menjelaskan opsi satu karakter.

Sebagian besar program Windows menggunakan parser mereka sendiri, membuat pengguna marah.

  • Beberapa membutuhkan /a /b /c , yang lain mengizinkan /a/b/c bergaya VMS , namun yang lain lebih suka gaya Unix /abc .
  • Kebanyakan menggunakan / sebagai awalan, beberapa juga menerima - , yang lain hanya menerima - .
  • Nilai dapat diberikan sebagai /foo bar , /foo=bar , /foo:bar .
  • Biasanya spasi bisa berupa /quoted "like this" , tetapi beberapa program menggunakan " sebagai karakter literal. (Ini adalah kerugian dari membiarkan program melakukan pemisahan kata sendiri; di Unix hal ini ditangani oleh shell.)
  • Program lintas platform dapat menggunakan implementasi getopt .

Umumnya yang pertama ditemukan di program lama yang terlalu mengakar kuat untuk diubah. Opsi panjang semacam itu tidak kompatibel dengan getopt() standar fungsi.

Gaya kedua diperkenalkan oleh GNU getopt_long() , dan sesuai dengan standar yang ada yang mengharapkan gaya pertama dibundel opsi singkat (yaitu, -orange diharapkan berarti -o -r -a -n -g -e ). Gaya opsi panjang ini sangat disukai.


Linux
  1. Enpass – Alternatif Kata Sandi Sempurna Gratis

  2. Apa kata sandi root default untuk MySQL 5.7

  3. Apa perbedaan antara satu garis putus-putus dan dua garis untuk parameter prompt perintah?

  1. Apa alasan rmdir(1) dan rm(1) hidup berdampingan?

  2. Apa arti - (tanda hubung) terakhir dalam opsi `bash`?

  3. Apa yang dilakukan ENV (“_”) untuk anti-debugging?

  1. Untuk apa grup `bayangan` digunakan?

  2. Apa yang membuat lewat init=/path/to/program ke kernel tidak memulai program sebagai init?

  3. Apa yang dimaksud dengan 'bidang' untuk perintah potong?