ฉันมักจะพบว่ามันน่ารำคาญ (หรือแย่กว่า) เมื่อฉันพิมพ์
command .*
ใน bash และคำสั่งใช้กับไดเร็กทอรีพาเรนต์และไดเร็กทอรีปัจจุบัน มีบางตัวเลือกเปลือกหรือการกำหนดค่าอื่น ๆ ที่ฉันสามารถปรับแต่งเพื่อให้ทุบตียกเว้น.
และ..
จากการขยายตัวของ.*
?
ฉันมักจะพบว่ามันน่ารำคาญ (หรือแย่กว่า) เมื่อฉันพิมพ์
command .*
ใน bash และคำสั่งใช้กับไดเร็กทอรีพาเรนต์และไดเร็กทอรีปัจจุบัน มีบางตัวเลือกเปลือกหรือการกำหนดค่าอื่น ๆ ที่ฉันสามารถปรับแต่งเพื่อให้ทุบตียกเว้น.
และ..
จากการขยายตัวของ.*
?
คำตอบ:
ใน bash ตามลำดับนี้:
GLOBIGNORE=.
shopt -u dotglob
เมื่อ GLOBIGNORE ถูกตั้งค่า และ .. จะถูกเพิกเฉยโดยอัตโนมัติดังนั้นคุณไม่จำเป็นต้องตั้งค่าเหล่านั้นใน GLOBIGNORE แต่ถ้าคุณไม่มีอะไรอื่นที่จะเพิกเฉยคุณจะไม่มีอะไรจะตั้งค่าให้
ทุกครั้งที่คุณตั้งค่า GLOBIGNORE ให้เป็นค่าที่ไม่ใช่ค่า null bash จะเปิดใช้งานตัวเลือกdotglob
ดังนั้นคุณจะต้องปิดในภายหลัง มิฉะนั้น bash จะขยาย*
เพื่อรวมไฟล์ที่ขึ้นต้นด้วยจุด
.
และ..
แต่ไม่และfoo/.
foo/..
คุณอาจต้องการใช้GLOBIGNORE=.:*/.:*/..
เพื่อทำให้ชื่อเส้นทางนี้ทำงานด้วย
ในระบบที่ไม่คุ้นเคยที่ฉันมีเวลาน้อยเกินไปในการตรวจสอบการตั้งค่าที่ใช้งาน (เช่น GLOBIGNORE) ฉันใช้รูปแบบที่เข้าใจผิดได้ดังต่อไปนี้:
command .??*
.
และ..
ไม่คำนึงถึงสภาพแวดล้อม.a
dotglob
เปิดดังนั้นการตั้งค่าGLOBIGNORE
เสียงที่สมบูรณ์แบบ