Böylece, giriş klasörümü sildim (veya daha doğrusu, yazma erişimim olan tüm dosyaları). Olan benim olduğum şeydi
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
bir bash betiğinde ve artık gerekmediğinde $build, bildirgeyi ve tüm kullanımlarını kaldırma - ama rm. Bash mutlu bir şekilde genişler rm -rf /*. Evet.
Kendimi aptal hissettim, yedeği kurdum, kaybettiğim işi yeniden yaptım. Utancı geçmeye çalışıyorum.
Şimdi merak ediyorum: bu tür hataların oluşmaması için bash senaryoları yazma teknikleri nelerdir, veya en azından daha az muhtemeldir? Mesela ben yazmıştım
FileUtils.rm_rf("#{build}/*")
Ruby senaryosunda tercüman buildilan edilmemekten şikayetçi olur , bu yüzden orada dil beni korur.
Bash'te düşündüğüm şey, karabata eklemenin yanı sıra rm(ilgili sorulardaki birçok cevabın da belirttiği gibi, problemsiz değildir):
rm -rf "./${build}/"*
Bu şu andaki çalışmamı (Git repo) başka bir şey değil öldürürdü.- Bunun bir varyantı / parametresi
rmmevcut dizinin dışında hareket ederken etkileşim gerektirir. (Hiçbiri bulunamadı.) Benzer etki.
Bu mu, yoksa bu anlamda "sağlam" olan bash scriptleri yazmanın başka yolları var mı?
set -uNeredeyse eskisi gibi kaşlarını çatmak değil set -e, ama yine de var.
#! /usr/bin/env rubyHer kabuk betiğinin en üstüne koyun ve bash hakkında unutun;)
rm -rf "${build}/*alıntı işaretleri nereye olursa olsun.rm -rf "${build}nedeniyle aynı şeyi yapacağımf.