Bagaimana saya bisa menghapus file tanpa meminta pengguna jika dia setuju untuk menghapus file? Saya menulis skrip shell dan menggunakan fungsi rm, tetapi meminta "menghapus file biasa?" dan aku benar-benar tidak membutuhkan ini. Terima kasih.
89
rm -f
,yes | rm
dan seterusnya, tapi ini milik SU.rm
tidak menunjukkan "hapus file biasa?" meminta secara default. Anda harus memilikinya aliasrm -i
, atau didefinisikan sebagai fungsi. Saya terkejut bahwa alias terlihat di dalam skrip Anda. Apakah Anda menjalankan skrip (./foo.sh
) atau sumbernya (. foo.sh
atausource foo.sh
)?Jawaban:
Anda mungkin telah
rm
alias untukrm -i
jadi coba ini:Untuk melihat alias Anda, Anda dapat menjalankan
alias
.sumber
command rm ...
atau\rm ...
lewati alias / functionrm
aliasrm -i
adalah ide yang buruk. Therm
perintah, secara default, diam-diam menghapus file bernama. Dengan mengalihkannyarm -i
, Anda dapat terbiasa tidak memeriksa dengan cermat sebelum menekan Enter, tergantung pada prompt interaktif untuk menyelamatkan Anda. Kemudian Anda mengetikrm some-important-file
suatu lingkungan tanpa alias.unset
perintah bash mungkin menarikBendera gaya menghapus semua prompt;
rm -f {file}
sumber
Semoga kekuatan bersamamu -
rm -f
sumber
Di dalam skrip shell, Anda ingin menggunakan
rm -f <filename>
tetapi Anda juga memiliki opsi untuk menyingkirkan-i
opsi implisit untuk lingkungan Anda dengan memasukkanunalias rm
dalam shell Anda (atau profil).sumber
unalias rm
tidak bekerja di CentOS? Amazon Linux?yang
yes
Program berulang kali menjawab ya untuk semua petunjuknya. sehingga Anda dapat menyalurkannya kerm
program interaktif untuk mendapatkan efek yang diinginkan juga.sebaliknya, jika Anda tidak ingin melakukan sesuatu yang interaktif, Anda bisa melakukannya
dan itu akan mengulangi 'n' pada aliran input (secara efektif menjawab tidak untuk pertanyaan)
sumber
yes n
opsi tidak bekerja untuk saya. Saat saya gunakanyes n | rm file.txt
, itu benar-benar menghapus file meskipun file tersebut dilindungi dengan benar.Jika Anda memiliki izin yang diperlukan untuk menghapus file dan Anda tidak ingin diminta, lakukan hal berikut (-f = force):
Jika Anda tidak memiliki izin untuk file tersebut, Anda harus menggunakan:
sumber
Backslash mem-
\
bypass alias.sumber
Selain menggunakan
-f
parameter, Anda juga dapat menggunakanfind
perintah, misalnyasumber
Saat ini saya sedang bekerja di suatu sistem, di mana bash shell menerima definisi perintah rm sebagai fungsi di salah satu file konfigurasi global:
Karenanya, tidak ada jawaban di atas mengenai alias yang berhasil. Untuk mengatasi perilaku menjengkelkan, saya membatalkan fungsi rm di file .bashrc saya
Saya memiliki masalah yang sama dengan pembuka. Namun saya tidak menemukan jawaban yang menyebutkan kemungkinan yang
rm
disembunyikan oleh fungsi shell. Jadi saya menambahkan jawabannya di sini dengan harapan akan membantu seseorang yang menghadapi masalah yang sama.Mengetik
/bin/rm
ataurm -f
sepanjang waktu tidak nyaman, dan mungkin memiliki konsekuensi buruk (dalam kasusrm -f
).sumber
/bin/rm
berfungsi? Jika saya memiliki fungsi dalam bash, dan file yang dapat dieksekusi dengan nama yang sama di direktori saat ini, hanya menambahkan./
di depan nama akan memanggil file - bukan fungsi. PS - Saya menambahkan komentar ke jawaban yang dipilih tentang fungsi &unset
/bin/rm
berhasil. Melakukanunset
penghapusan menghilangkan kebutuhan untuk mengetik path lengkap.Jika Anda
rm
aliasrm -i
, gunakanunalias rm
;Jangan gunakan
rm -f
secara langsung kecuali Anda benar-benar ingin menghapus banyak file yang dilindungi tulis. Pasti ada alasan yang sangat bagus untuk digunakan-f
.Namun, jika Anda memiliki banyak file yang dilindungi penulisan, Anda mungkin lebih suka
rsync -r --delete empty/ removed_dir/
untuk kecepatan yang lebih cepat.sumber
Cara favorit saya untuk melakukan ini adalah cukup menggunakan
command
perintah di bash, sama seperti cara Anda menggunakannyasudo
. Ini akan menjalankan perintah Anda tanpa alias, sama seperti menjalankannya/bin/rm
(mungkinrm
aliasrm -i
).Contoh:
sumber
sumber