Sering terjadi bahwa saya ingin menerapkan operasi secara rekursif. Beberapa perintah, seperti grep, menggunakan huruf kecil r untuk menunjukkan rekursi. Sebagai contoh
grep -r foo .
Perintah lain tampaknya lebih suka huruf R besar:
chmod -R 755 .
Saya terus mendapatkan yang salah dan lupa yang mana. Apakah ada logika di balik pemilihan kasus untuk argumen ini?
--recursive
, mereka tidak akan melakukan hal yang salah.-r
sarana untukJawaban:
Kebanyakan POSIX perintah yang memiliki pilihan direktori traversal rekursif (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) memiliki-R
untuk itu.rm
juga memiliki-r
karena itulah yang awalnya, jauh sebelum POSIX.Sekarang, perilaku bervariasi ketika symlink ditemukan berjalan menuruni pohon. POSIX mencoba untuk membuat hal-hal yang konsisten dengan menambahkan opsi
-L
/-H
/P
untuk memberikan pengguna kesempatan untuk memutuskan apa yang harus dilakukan dengan symlink meninggalkan default ketika tidak ada yang disediakan tidak ditentukan.POSIX
grep
tidak memiliki-r
atau-R
.GNU
grep
awalnya tidak memiliki keduanya.-r
ditambahkan pada tahun 1998. Itu mengikuti symlinks.-R
ditambahkan sebagai sinonim pada tahun 2001 untuk konsistensi dengan utilitas lain. Itu masih mengikuti symlink.Pada 2012 (grep 2.12),
-r
diubah sehingga tidak lagi mengikuti symlink, mungkin karena-L
,-H
sudah digunakan untuk hal lain.BSD
grep
didasarkan pada GNU grep untuk waktu yang lama. Beberapa dari mereka telah menulis ulang sendiri dan menjaga kompatibilitas dengan GNUgrep
. Apple OS / X menangani masalah symlink secara berbeda.-r
dan-R
sama dan tidak mengikuti symlink. Ada-S
pilihan namun yang bertindak sepertichmod
/cp
/find
's-L
pilihan untuk mengikuti symlink.sumber
rm
memiliki opsi rekursif sebelum yang lain. Itu tadi-r
. Kemudiancp
mendapat kecocokan-r
. Kemudianls
ingin memiliki opsi rekursif, tetapils -r
sudah berarti "sortir terbalik" jadi itu harus-R
. Di sana ketegangan antara-R
dan-r
dimulai.-R
adalah satu-satunya yang dapat ditambahkan secara konsisten ke setiap utilitas yang relevan, tetapirm -r
sudah menjadi penggunaan tradisional yang terkenal. Kemudian GNU datang dan berkata "konsistensi dan tradisi untuk kotak, bung!"Tidak ada sama sekali. Ini tergantung pada apa yang dipilih pengembang. Seringkali karena keduanya
-r
dan-R
merupakan opsi yang valid. Dalam program yang Anda kutip, misalnya:GNU versi terbaru
grep
:chmod
tidak punya-r
pilihan jadi, mungkin, para devs lebih suka-R
. Namun, tentu saja,-r
adalah string izin yang valid (seperti yang ditunjukkan oleh @Arkadiusz Drabczykso) sehingga tidak dapat benar-benar digunakan di sana.sumber
grep
versimu? GNU grep 2.12,-r
dan-R
sama. Dengan chmod,-R
didefinisikan oleh POSIX.grep (GNU grep) 2.15
dan saya ingat melihat ini di versi sebelumnya. Apakah Anda yakin itu tidak terjadi pada Anda? Mereka pada dasarnya memberikan hasil yang sama dalam banyak kasus, mereka hanya berperilaku berbeda dengan tautan. Adapunchmod
, itu mungkin didefinisikan oleh POSIX tetapi itu masih, mungkin, karenachmod
devs asli memilihR
lebihr
.-r
karena itu sudah menjadi string izin yang valid.Sebagian besar, itu tergantung pada preferensi pribadi pengembang. Namun, kadang-kadang, opsi huruf besar dipilih jika opsi huruf kecil yang lebih disukai diambil untuk hal lain yang menurut pengembang lebih penting daripada, misalnya, beroperasi secara rekursif. Dalam kasus chmod
-r
adalah mode yang valid. Sebagai contoh:sumber
Jika memungkinkan, gunakan versi GNU dari utilitas ini dan kemudian Anda dapat menggunakan nama yang lebih panjang untuk opsi.
Tidak.
Atau tidak banyak. Utilitas Unix dikembangkan sedikit demi sedikit dan opsi perintah mencerminkan pilihan individu dari pengembang utama atau pengembang tunggal mereka. Hanya ada 26 huruf opsi ASCII huruf kecil yang tersedia, yang merupakan himpunan pilihan (perintah umumnya dalam huruf kecil untuk kemudahan mengetik), dan himpunan terbatas ini mengarah ke konflik mnemonik. Konflik menyebabkan inkonsistensi karena versi baru perintah / utilitas mendapatkan fitur baru .
sumber
20 tahun yang lalu ketika saya telah belajar UNIX, mentor saya mengatakan kepada saya seperti ini: "Anda sebaiknya mengetikkan opsi rekursif dalam huruf R selalu. Karena beberapa perintah memiliki arti yang berbeda pada opsi r huruf kecil, tetapi huruf besar R sebagian besar berfungsi sebagai opsi rekursif di mana-mana. Dan Anda akan terbiasa dengan [rm * -Rf] dengan menekan tombol shift saat mengetik R. "
sumber