Setiap kali saya rm
beberapa item sekaligus dengan shell globbing dan bahkan ada kemungkinan sekecil apa pun untuk memperluas pola lebih dari yang saya harapkan, saya selalu mencoba mengingat untuk menambahkan -i
, tapi (tentu saja) saya bisa lupa dan secara tidak sengaja menerbangkan sesuatu yang bermanfaat. Beberapa orang mencoba menyelesaikan masalah ini dengan alias, seperti alias rm='rm -i'
tapi saya benci ide membuat rm selalu interaktif, karena dengan begitu saya akan terbiasa menggunakan -f
semua waktu, yang jelas akan mengalahkan seluruh tujuan.
Yang ingin saya lakukan adalah rm
menggunakan hanya -i
ketika saya menggunakan globbing, dan -f
tentu saja untuk menimpanya -i
, jadi saya masih bisa menerbangkan seluruh direktori dengan yang biasa rm -rf junk
.
Karena itu rm *blah*
akan benar-benar rm -i *blah*
tetapi rm blah
akan bekerja persis seperti yang diketik.
Jika ada perbedaan dalam bagaimana hal ini dapat dilakukan dalam shell yang berbeda, saya akan memilih jawaban yang memasok metode untuk bash dan zsh atas jawaban yang hanya mencakup satu atau yang lain.
Catatan : Saya sebenarnya tidak yakin ini adalah ide yang bagus; Saya hanya bertanya apakah itu mungkin. Jika Anda pikir ini adalah ide yang bodoh, saya akan sangat senang mendengar alasan di balik pendapat Anda, tetapi tolong jangan mengirim komentar seperti itu di bidang jawaban . Jawaban yang sebenarnya memberi tahu saya bagaimana melakukan ini atau menjelaskan itu / mengapa itu tidak mungkin (atau mungkin menawarkan metode alternatif untuk mendapatkan hasil yang serupa). Tetapi jika Anda ingin memberi tahu saya mengapa ini bodoh, silakan kirim sebagai komentar. Saya akan memilih komentar yang masuk akal sekalipun saya tidak setuju dengan kesimpulannya.
rm -I
adalah seperti-i
itu hanya memicu ketika lebih dari tiga file atau-r
dilewatkan. Dibash
, gunakanCtrl-x *
pintasan keyboard untuk memperluas gumpal dan memeriksanya sendiri.noglob
dengan misalnya, aliasing rm tonoglob my-rm
, dan kemudian memiliki my-rm menjadi skrip yang memeriksa bola dunia, memperluasnya, dan melewati -i atau tidak. Tidak yakin, tidak tahu zsh.myrm
dan biarkan skrip itu melakukan hal-hal luar biasa yang Anda sukai.Jawaban:
Ini tidak mudah. Masalahnya adalah ketika Anda melakukannya:
rm hanya melihat daftar file, bukan pola globbing yang telah diperluas oleh shell.
Yang bisa Anda lakukan adalah (zsh):
Ini memberi tahu zsh bahwa pola tidak boleh diperluas saat memanggil rm. Kemudian Anda dapat mendefinisikan kembali rm sebagai fungsi yang melakukan ekspansi itu sendiri dan menambahkan "-i" jika perlu sesuatu seperti:
Masalah dengan pendekatan itu adalah bahwa "rm" baru ini tidak melihat perbedaan di antara keduanya
dan
Untuk menghapus file yang dipanggil
*
, Anda harus menulisnya:sumber
Bekerja di bash, mungkin di shell lain. Tempatkan di
.bashrc
sumber
command rm
untuk menghindari pengkodean-kerasPATH
. Juga, pendekatan memeriksa jumlah argumen agak tidak dapat diandalkan, karenarm
dapat mengambil opsi.\rm
$1
dengan tanda kutip ganda, tetapi salah tentang perintah yang melarikan diri. Mengutip hanya menekan alias, BUKAN mencari fungsi. Jawaban ini menyarankan fungsi, bukan alias.