Jadi, saya menghapus folder rumah saya (atau, lebih tepatnya, semua file yang saya tulis aksesnya). Apa yang terjadi adalah yang saya miliki
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
dalam skrip bash dan, setelah tidak perlu lagi $build
, menghapus deklarasi dan semua penggunaannya - tetapi rm
. Bash dengan senang hati mengembang rm -rf /*
. Ya.
Saya merasa bodoh, menginstal cadangan, redid pekerjaan yang hilang. Mencoba melewati rasa malu.
Sekarang, saya bertanya-tanya: apa teknik untuk menulis skrip bash sehingga kesalahan seperti itu tidak bisa terjadi, atau setidaknya lebih kecil kemungkinannya? Misalnya, sudahkah saya menulis
FileUtils.rm_rf("#{build}/*")
dalam naskah Ruby, penerjemah akan mengeluh karena build
tidak dideklarasikan, jadi bahasa itu melindungi saya.
Apa yang telah saya pertimbangkan dalam bash, selain mengoreksi rm
(yang, sebagaimana banyak jawaban dalam pertanyaan terkait menyebutkan, tidak bermasalah):
rm -rf "./${build}/"*
Itu akan membunuh pekerjaan saya saat ini (repo Git) tetapi tidak ada yang lain.- Varian / parameterisasi
rm
yang memerlukan interaksi ketika bertindak di luar direktori saat ini. (Tidak dapat menemukan.) Efek serupa.
Apakah itu, atau adakah cara lain untuk menulis skrip bash yang "kuat" dalam pengertian ini?
set -u
tidak mengernyit set -e
, tetapi ia masih memiliki gotcha.
#! /usr/bin/env ruby
di bagian atas setiap skrip shell dan lupakan bash;)
rm -rf "${build}/*
mana pun tanda kutip pergi.rm -rf "${build}
akan melakukan hal yang sama karenaf
.