GNU/Linux >> Belajar Linux >  >> Linux

Mengapa manual rm mengatakan bahwa kita dapat menjalankannya tanpa argumen, padahal ini tidak benar?

Sinopsis standar untuk rm utilitas ditentukan dalam standar POSIX sebagai

rm [-iRr] file...
rm -f [-iRr] [file...]

Dalam bentuk pertamanya, ia memerlukan setidaknya satu operan file, tetapi dalam bentuk keduanya tidak.

Melakukan rm -f tanpa operan file bukanlah kesalahan:

$ rm -f
$ echo "$?"
0

... tapi itu tidak banyak membantu.

Standar mengatakan bahwa untuk -f opsi, rm utilitas harus...

Jangan meminta konfirmasi. Jangan menulis pesan diagnostik atau mengubah status keluar jika tidak ada operan file, atau jika operan tidak ada. Kemunculan -i sebelumnya opsi akan diabaikan.

Ini menegaskan bahwa rm -f harus dapat dijalankan tanpa operan pathname dan ini bukan sesuatu yang membuat rm keluar dengan pesan diagnostik atau status keluar bukan nol.

Fakta ini sangat berguna dalam skrip yang mencoba menghapus sejumlah file sebagai

rm -f -- "[email protected]"

di mana "[email protected]" adalah daftar nama jalur yang mungkin kosong atau tidak, atau yang mungkin berisi nama jalur yang tidak ada.

(rm -f masih akan menghasilkan pesan diagnostik dan keluar dengan status keluar bukan nol jika ada masalah izin mencegah file bernama dihapus.)

Menjalankan utilitas tanpa operan opsi atau pathname adalah kesalahan:

$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1

Hal yang sama berlaku untuk GNU rm (di atas menunjukkan OpenBSD rm ) dan implementasi lain dari utilitas yang sama, tetapi pesan diagnostik yang tepat dan status keluar bukan nol mungkin berbeda (di Solaris nilainya 2, dan di macOS nilainya 64, misalnya).

Kesimpulannya, GNU rm manual mungkin sedikit tidak tepat karena memang benar bahwa dengan beberapa opsi (-f , yang merupakan opsi opsional), operan pathname bersifat opsional.

sejak edisi 2016, setelah resolusi bug ini, lihat edisi sebelumnya untuk referensi.
POSIX adalah standar yang mendefinisikan sistem Unix dan bagaimana perilakunya. Standar ini diterbitkan oleh The Open Group. Lihat juga pertanyaan "Apa itu POSIX?".


Secara teknis, sinopsisnya benar, tetapi membingungkan. Ada kasus di mana nama file tidak diperlukan:

rm --help
rm --version

(saat menggunakan GNU rm ). Semua kasus lainnya memerlukan nama file.

Versi lain dari rm tampilkan file sebagai non-opsional, mis. di halaman manual OpenBSD.

Sinopsis yang lebih akurat untuk GNU rm akan menampilkan tiga varian:

rm [opsi ...] berkas ...
rm --help
rm --version


Linux
  1. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  2. Mengapa `zip` Dalam A For Loop Bekerja Saat File Ada, Tapi Tidak Saat Tidak?

  3. Perintah "java" tidak menjalankan JVM yang telah diinstal

  1. Di Unix, dapatkah saya menjalankan 'make' di direktori tanpa cd'ing ke direktori itu terlebih dahulu?

  2. Bisakah read(2) mengembalikan nol saat tidak di EOF?

  3. gdb tidak mencapai breakpoint apa pun saat saya menjalankannya dari dalam wadah Docker

  1. Mengapa dikatakan Kita tidak boleh memasukkan batasan.h! di dirent.h?

  2. Mengapa rsync tidak menggunakan delta-transfer untuk file lokal?

  3. Mengapa Windows tidak mengenali file di dalam partisi Linux?