Saya tahu bahwa rm -f file1
secara paksa akan menghapus file1
tanpa meminta saya.
Saya juga tahu bahwa rm -i file1
akan meminta saya terlebih dahulu sebelum menghapusfile1
Sekarang jika Anda mengeksekusi rm -if file1
, ini juga akan dengan paksa menghapus file1
tanpa meminta saya.
Namun, jika Anda mengeksekusi rm -fi file1
, itu akan meminta saya sebelum menghapus file1
.
Jadi apakah benar bahwa ketika menggabungkan opsi perintah, yang terakhir akan diutamakan? seperti rm -if
, maka -f
akan diutamakan, tetapi -fi
kemudian -i
akan diutamakan.
The ls
perintah misalnya, tidak masalah jika Anda mengatakan ls -latR
atau ls -Rtal
.
Jadi saya kira itu hanya masalah ketika Anda memiliki opsi perintah yang bertentangan seperti rm -if
, apakah itu benar?
command-line
rm
command
options
alkabari
sumber
sumber
Jawaban:
Saat menggunakan
rm
keduanya-i
dan-f
opsi, yang pertama akan diabaikan. Ini didokumentasikan dalam standar POSIX :dan juga di
info
halaman GNU :Mari kita lihat apa yang terjadi di bawah tenda:
rm
memproses opsinya dengangetopt(3)
, khususnyagetopt_long
. Fungsi ini akan memproses argumen opsi di baris perintah (**argv
) sesuai urutan tampilan:Fungsi ini biasanya disebut dalam satu lingkaran sampai semua opsi diproses. Dari perspektif fungsi ini, opsi diproses secara berurutan. Apa yang sebenarnya terjadi, bagaimanapun, adalah ketergantungan aplikasi, karena logika aplikasi dapat memilih untuk mendeteksi opsi yang bertentangan, menimpanya, atau menyajikan kesalahan. Untuk kasus
rm
dani
danf
pilihan, mereka sempurna menimpa eachother. Darirm.c
:Kedua opsi mengatur variabel yang sama, dan keadaan variabel ini akan menjadi opsi mana yang terakhir di baris perintah. Efek dari ini sejalan dengan standar POSIX dan
rm
dokumentasi.sumber
rm
). Saya pikir jarang ada perintah yang pernah mengambil pengaturan opsi pertama, dan mengabaikan argumen yang akan mengubah opsi yang sudah ditetapkan.Ya, untuk
rm
ini valid. Namun, jika opsi terakhir mengabaikan yang sebelumnya tergantung pada masing-masing program itu sendiri. Dari ´info rm´Sebagai petunjuk umum:
info
biasanya lebih rinci daripadaman
, yang biasanya lebih rinci daripada--help
opsi.sumber
Tidak ada "prioritas" untuk bendera, masing-masing program menanganinya seperti yang diinginkan. Sebagian besar melakukan upaya untuk mengumpulkan semua bendera dan memeriksa konflik, untuk alat standar (seperti yang direferensikan
rm(1)
) standar yang relevan mungkin mengamanatkan sesuatu (tapi sekali lagi, versi khusus Anda mungkin ceroboh dalam menafsirkan kasus sudut standar / tidak diuji secara khusus untuk mereka).Untuk programmer yang menulis program, paling mudah untuk mempertimbangkan argumen (flag dan lainnya) dalam urutan ketat dari kiri ke kanan, dan mungkin menyelamatkan ketika memukul beberapa halangan. Jika menggunakan perpustakaan untuk menangani flag (seperti
getopt(3)
, ada beberapa versi yang beredar) programmer mungkin melakukan apa yang paling mudah / alami. Programmer adalah orang, orang malas (atau setidaknya tidak suka memikirkan ledakan kombinatorial).sumber