วิธี cd ลงในไดเรกทอรีด้วยชื่อนี้“ -2” (เริ่มต้นด้วยเครื่องหมายขีดกลาง)?


169

ฉันมีไดเรกทอรีชื่อ:

-2

ฉันต้องการซีดีมัน แต่ซีดีบ่น:

bash: cd: -2: invalid option

ไม่ประสบความสำเร็จฉันได้ลอง:

cd "-2"
cd '-2'
cd \-2

ทางออกใด ๆ

แก้ไข: ไม่มีไฟล์เบราว์เซอร์เช่น mc และอื่น ๆ บนเซิร์ฟเวอร์


2
คำถามที่เกี่ยวข้องกับ superuser: superuser.com/questions/361573/…
yms

คำตอบ:


272

อย่างน้อยสองวิธี:

  1. ใช้--อาร์กิวเมนต์

    cd -- -2
    

    สิ่งนี้ใช้หลักการทั่วไปที่ใช้กับเครื่องมือของ GNU ซึ่งจะไม่ถือว่าสิ่งใด ๆ ที่ปรากฏขึ้นหลังจากนั้น--เป็นตัวเลือกบรรทัดคำสั่ง

    ตามความเห็นของผู้บันทึกข้อตกลงนี้ยังกำหนดไว้ในมาตรฐาน POSIX :

    พฤติกรรมเริ่มต้น:เมื่อส่วนนี้ถูกแสดงเป็น "ไม่มี" หมายความว่าการใช้งานนั้นไม่จำเป็นต้องรองรับตัวเลือกใด ๆ ยูทิลิตี้มาตรฐานที่ไม่ยอมรับตัวเลือก แต่ยอมรับตัวถูกดำเนินการจะรับรู้"--"ว่าเป็นอาร์กิวเมนต์แรกที่จะถูกทิ้ง

    ข้อกำหนดสำหรับการรับรู้"--"เป็นเพราะการใช้งานที่สอดคล้องต้องมีวิธีในการป้องกันตัวถูกดำเนินการจากตัวเลือกโดยพลการใด ๆ ที่การดำเนินงานอาจให้เป็นส่วนขยาย ตัวอย่างเช่นถ้ารายการยูทิลิตี้มาตรฐาน foo แสดงว่าไม่มีตัวเลือกและแอปพลิเคชันที่จำเป็นต้องให้ชื่อพา ธ ที่มียัติภังค์ชั้นนำมันสามารถทำได้อย่างปลอดภัยดังนี้:

    foo -- -myfile
    

    และหลีกเลี่ยงปัญหาใด ๆ กับ-m ที่ใช้เป็นส่วนขยาย

    เช่นเดียวกับ :

    หลักเกณฑ์ 10:
    อาร์กิวเมนต์--ควรได้รับการยอมรับเป็นตัวคั่นที่ระบุจุดสิ้นสุดของตัวเลือก อาร์กิวเมนต์ใด ๆ ต่อไปนี้ควรถูกใช้เป็นตัวถูกดำเนินการแม้ว่าจะเริ่มต้นด้วย'-'อักขระ --อาร์กิวเมนต์ไม่ควรใช้เป็นตัวเลือกหรือเป็นตัวถูกดำเนินการ

  2. ระบุเส้นทางอย่างชัดเจน:

    cd ./-2
    

    สิ่งนี้ระบุเส้นทางการตั้งชื่อไดเรกทอรีปัจจุบัน ( .) เป็นจุดเริ่มต้นอย่างชัดเจน

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    เหล่านี้คือรูปแบบต่าง ๆ ข้างต้น จำนวนรูปแบบใด ๆ ที่อาจเป็นไปได้; ฉันจะปล่อยให้มันเป็นแบบฝึกหัดให้ผู้อ่านค้นพบทั้งหมด


23
มันไม่ใช่แค่ GNU แต่เป็นส่วนหนึ่งของมาตรฐาน POSIX ดูที่1.11 ค่าเริ่มต้นของยูทิลิตี้คำอธิบายและแนวทางไวยากรณ์ของยูทิลิตี้ 12.2 (หลักเกณฑ์ # 10) จากcdหน้า " cdยูทิลิตี้จะต้องเป็นไปตาม ... มาตรา 12.2"
Dietrich Epp

ตอนนี้ฉันแค่อยากรู้วิธีการ cd ไปยังไดเรกทอรีชื่อ -!
sergiol

2
@sergiol เช่นเดียวกัน
Michael Hampton

1
@ArtB: ไม่การประกาศมีผลกับการแยกฟิลด์เท่านั้น ดังนั้น"hello world"เป็นหนึ่งในข้อโต้แย้ง แต่hello worldเป็นสองคนและเป็นเช่นเดียวกับ"-2" -2
Dietrich Epp

1
@sergiol: อย่างใดอย่างหนึ่งcd -- --หรือcd ./--ควรทำงาน
Keith Thompson


26

สิ่งนี้จะใช้ได้ถ้า '-2' อยู่ในไดเรกทอรีปัจจุบัน

    cd ./-2

คุณสามารถเติมข้อความอัตโนมัติโดยพิมพ์ - และกดแท็บ



7

เพียงเพื่อเสริมถ้าคุณต้องการที่จะลบ / ลบไดเรกทอรีนี้คุณสามารถใช้คำสั่งต่อไปนี้:

rm -r -- -2

... และเพื่อเสริมฉันจะไม่ทำเช่นนั้น แต่ฉันจะใช้เครื่องมือกราฟิกเช่น mc หรือฉันจะเปลี่ยนชื่อไดเรกทอรีก่อน
Nick

-1

ฉันรู้ว่าคำถามนี้ได้รับการตอบแล้ว หากใครมีสถานการณ์อย่างฉันนี่เป็นของพวกเขา:

ฉันรันแอพ java และกำลังมองหาไดเรกทอรีที่เริ่มต้นด้วย<path>ฉันควรจะแทนที่ด้วยพา ธ ที่ถูกต้องก่อนเรียกใช้แอป อย่างไรก็ตามฉันลืมที่จะทำเช่นนั้น <path>แอปพลิเคสร้างไดเรกทอรีที่เรียกว่า

ฉันพยายามที่จะcd <path>- ให้ฉันข้อผิดพลาด "-bash: ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นขึ้นบรรทัดใหม่ที่ไม่คาดคิด" ตามคำแนะนำที่นี่ (ฉันเข้าใจว่ามันสำหรับไดเรกทอรีที่ขึ้นต้นด้วย - และไม่ใช่ <) ฉันพยายามcd -- <path>แล้ว อย่างไรก็ตามฉันได้รับข้อผิดพลาดเดียวกัน

เมื่อฉันลองcd \<path>\- มันใช้งานได้!

ข้อมูลพื้นฐาน:

สัญลักษณ์ "<" และ ">" ถูกใช้เพื่อเปลี่ยนเส้นทาง STDIN และ STDOUT ดังนั้นพวกเขาจำเป็นต้องหลบหนีเพื่อที่จะทำให้เชลล์ไม่ได้ interprete พวกมันเป็นการเปลี่ยนเส้นทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.