Saat menggunakan rm
keduanya -i
dan -f
opsi, yang pertama akan diabaikan. Ini didokumentasikan dalam standar POSIX :
-f
Do not prompt for confirmation. Do not write diagnostic messages or modify
the exit status in the case of nonexistent operands. Any previous
occurrences of the -i option shall be ignored.
-i
Prompt for confirmation as described previously. Any previous occurrences
of the -f option shall be ignored.
dan juga di info
halaman GNU :
‘-f’
‘--force’
Ignore nonexistent files and missing operands, and never prompt the user.
Ignore any previous --interactive (-i) option.
‘-i’
Prompt whether to remove each file. If the response is not affirmative, the
file is skipped. Ignore any previous --force (-f) option.
Mari kita lihat apa yang terjadi di bawah tenda:
rm
memproses opsinya dengan getopt(3)
, khususnya getopt_long
. Fungsi ini akan memproses argumen opsi di baris perintah ( **argv
) sesuai urutan tampilan:
Jika getopt () dipanggil berulang kali, ia akan mengembalikan setiap karakter opsi dari setiap elemen opsi secara berurutan.
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
dan i
dan f
pilihan, mereka sempurna menimpa eachother. Dari rm.c
:
234 case 'f':
235 x.interactive = RMI_NEVER;
236 x.ignore_missing_files = true;
237 prompt_once = false;
238 break;
239
240 case 'i':
241 x.interactive = RMI_ALWAYS;
242 x.ignore_missing_files = false;
243 prompt_once = false;
244 break;
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.