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 build
ilan 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
rm
mevcut 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 -u
Neredeyse eskisi gibi kaşlarını çatmak değil set -e
, ama yine de var.
#! /usr/bin/env ruby
Her 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
.