ดังนั้นฉันจึงลบโฟลเดอร์บ้านของฉัน (หรืออย่างแม่นยำยิ่งขึ้นไฟล์ทั้งหมดที่ฉันมีสิทธิ์เข้าถึงเพื่อเขียน) สิ่งที่เกิดขึ้นคือฉันมี
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
ในสคริปต์ทุบตีและหลังจากต้องไม่$build
เอาการประกาศและการใช้งานได้ทั้งหมด - rm
แต่ rm -rf /*
ทุบตีอย่างมีความสุขที่จะขยาย ใช่.
ฉันรู้สึกงี่เง่าติดตั้งข้อมูลสำรองทำให้งานที่ฉันทำหายไป พยายามที่จะย้ายผ่านความอับอาย
ตอนนี้ฉันสงสัยว่าอะไรคือเทคนิคในการเขียนสคริปต์ทุบตีเพื่อให้ข้อผิดพลาดดังกล่าวไม่สามารถเกิดขึ้นได้หรืออย่างน้อยก็มีโอกาสน้อย? ตัวอย่างเช่นถ้าฉันเขียน
FileUtils.rm_rf("#{build}/*")
ในสคริปต์ Ruby ผู้แปลก็จะบ่นbuild
ว่าไม่ได้ถูกประกาศดังนั้นภาษาก็ช่วยปกป้องฉัน
สิ่งที่ฉันได้พิจารณาในการทุบตีนอกเหนือจากการจับกลุ่มrm
(ซึ่งเป็นคำตอบมากมายในคำถามที่เกี่ยวข้องพูดถึงไม่ได้เป็น unproblematic):
rm -rf "./${build}/"*
นั่นคงจะฆ่างานปัจจุบันของฉัน (repo Git) แต่ไม่มีอะไรอื่น- ตัวแปร / การกำหนดพารามิเตอร์ของ
rm
นั้นต้องมีการโต้ตอบเมื่อทำหน้าที่ภายนอกไดเรกทอรีปัจจุบัน (ไม่พบสิ่งใด) ลักษณะพิเศษที่คล้ายกัน
มันเป็นหรือมีวิธีอื่นในการเขียนสคริปต์ทุบตีที่ "แข็งแกร่ง" ในแง่นี้หรือไม่?
set -u
ไม่เกือบขมวดคิ้วอย่างที่เป็นset -e
อยู่ แต่ก็ยังมี gotchas อยู่
#! /usr/bin/env ruby
ที่ด้านบนของเชลล์สคริปต์ทุกและลืมเกี่ยวกับทุบตี;)
rm -rf "${build}/*
ใดที่ไม่ว่าเครื่องหมายคำพูดจะไปที่ใด จะทำสิ่งเดียวกันเพราะrm -rf "${build}
f