ไดเร็กทอรีใดที่ path `// 'แสดงใน Linux


13

เมื่อฉันต้องการที่จะกลับไปไดเรกทอรีระดับบนในลินุกซ์โดยการพิมพ์cd ..ผม cd //typo-ED สำหรับความประหลาดใจที่ยิ่งใหญ่ของฉันไม่มีการรายงานข้อผิดพลาด username@hostname://$มีอะไรมากกว่าที่พรอมต์จะกลายเป็น lsระบุว่าตอนนี้ฉันอยู่ที่ไดเรกทอรีรูท

นี่เป็นข้อบกพร่องหรือคุณสมบัติของเชลล์หรือไม่? หากคุณสมบัติเป็น//นามแฝง/คืออะไร? เปลือกของฉันคือ GNU ทุบตีรุ่น 4.1.5 (1) - ปล่อย (i686-linux-gnu)

ขอขอบคุณและขอแสดงความนับถือ.


คำตอบ:


30

ก็สามารถพิจารณาได้เช่นกัน

ใน Linux //ไม่มีความหมายอะไร - เครื่องหมายทับต่อเนื่องหลายอันถูกยุบลงหนึ่งอันทุกที่ในเส้นทางรวมถึงจุดเริ่มต้น เปลี่ยนไดเรกทอรีที่จะ//ทำให้คุณอยู่ใน/ขณะที่ทำงานreadlink /proc/self/cwdจะบอก; ในทำนองเดียวกันจะทรุดลงไป/usr//local///bin/usr/local/bin

แต่บาง Unix อื่น ๆ เช่นระบบเช่น Cygwin หรือเก่าอพอลโลโดเมน / OS ให้ใช้// คำนำหน้า//fileserver/path/to/dataสำหรับเส้นทางเครือข่ายเช่น POSIX ให้สิ่งนี้เช่นกัน

ด้วยเหตุผลหลายประการเชลล์ทุบตีจะติดตามไดเรกทอรีปัจจุบันด้วยตนเอง (นอกเหนือจากการติดตามโดยระบบปฏิบัติการ) และมีรหัสอยู่ในนั้นเพื่อป้องกันไม่ให้เริ่มต้น//ถูกยุบเพื่อให้เข้ากันได้กับระบบดังกล่าว "คุณสมบัติ" คือการทุบตีให้การติดตามไดเรกทอรีปัจจุบันง่ายขึ้นตัวอย่างเช่นเมื่อcdเข้าสู่ symlink การทุบตีจะแสดงเส้นทางที่คุณคาดหวังแม้ว่าเคอร์เนลจะคิดเป็นอย่างอื่น "ข้อผิดพลาด" คือการทุบตีอนุญาต//แม้ในระบบที่ไม่ได้ใช้มัน


น่าสนใจzshช่วยcd //แต่ฉลาดพอที่จะแสดง/ในสตริงพรอมต์
new123456

@BinaryZebra Bitsavers มีชุดคู่มือ Unix เก่ารวมถึง Apollo's - ควรมีตัวอย่างมากมาย เว็บไซต์ TUHS ควรมีบางอย่างเช่นกัน
user1686

ขอบคุณมากฉันพบคำอธิบายสำหรับ // ในคู่มือ Bitsavers

9

จากนิยามชื่อพา ธ POSIX:

ชื่อพา ธ อาจมีเครื่องหมายทับอย่างน้อยหนึ่งรายการ หลายสแลชที่ต่อเนื่องกันจะถือว่าเป็นสแลชเดียวกัน

แหล่ง

และแม่นยำยิ่งขึ้นดังที่ grawity ได้กล่าวไว้ในความคิดเห็นของเขาด้านล่างจากบทที่ 4.11ในการแก้ไขชื่อพา ธ :

ชื่อพา ธ ที่ขึ้นต้นด้วยเครื่องหมายทับสองอันต่อเนื่องอาจตีความได้ในลักษณะที่กำหนดในการนำไปใช้แม้ว่าจะมีเครื่องหมายทับสองชั้นมากกว่าจะถือว่าเป็นเครื่องหมายทับเดียว


1
ส่วนที่เหมาะสมมากขึ้นคือ4.11 การแก้ปัญหาชื่อพา ธ (ย่อหน้าสุดท้าย) เนื่องจากพฤติกรรมที่เป็นปัญหาปรากฏขึ้นสำหรับเครื่องหมายนำหน้าสองอันเท่านั้น
user1686

3

มันเป็นคุณสมบัติ หากคุณได้รับเชลล์สคริปต์ไปและใช้งานfindตัวอย่างเช่นพา ธ ทั้งหมดจะนำหน้าด้วย. / มักจะ จากนั้นหากคุณยึดติดกับเส้นทางที่เกิดขึ้นจริงมันจะกลายเป็น `/my/path/./appended/path ซึ่งจะแก้ไขเป็น / my / path / appended / path ดังนั้นหากฉันไม่เข้าใจผิด // // ตีความว่าเป็น /./ และดังนั้น / สิ่งนี้จะเหมือนกันหากคุณไปที่ / home / user // คุณจะไขลานใน / home / user /


1

ฉันจะแสดงข้อความ "บั๊ก" ในทันที

พา ธ "/", "//", "/////////////////////" "ทั้งเส้นทางมีความหมายเหมือนกัน:" / " คุณสามารถเพิ่ม "/" ได้มากเท่าที่คุณต้องการในเส้นทาง Unix ซึ่งจะไม่เปลี่ยนความหมายของมัน

"บั๊ก" เกี่ยวข้องกับความจริงที่ว่าพรอมต์ของคุณใช้การพิมพ์ที่ถูกต้องล่าสุดในพา ธ เพื่อแสดงไม่ใช่ "pwd" ที่แท้จริง

ตลกอยู่ดี;)


เห็นด้วย - //ในพรอมต์เป็นผลข้างเคียงของตัวแปรสภาพแวดล้อมพรอมต์ของคุณ ( $PS1) - มีการPS1กำหนดอย่างไร
Doug Harris

@DougHarris ตัวแปรถูกกำหนดให้เป็น$PS1 [\u@\h \W]\$มีปัญหาอะไรกับการตั้งค่า?
Summer_More_More_Tea

แปลก ถ้าฉันลอง PS1 นั้นฉันจะได้รับ/เมื่อ pwd = /เท่านั้น ฉันสงสัยว่าคุณทำงานพิเศษเพื่อรับไดเรกทอรีหรือไม่ เป็นที่$PROMPT_COMMANDตั้ง?
Doug Harris

@DougHarris echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"ใช่ตัวแปรนี้มีการตั้งค่าที่มีค่า คุณช่วยอธิบายรายละเอียดเล็กน้อยได้ไหม? ฉันไม่ค่อยคุ้นเคยกับตัวแปรทั้งสองนี้ ขอบคุณ
Summer_More_More_Tea

อ่านหน้า bash man และค้นหาPS1และPROMPT_COMMAND- ใช้man bashที่บรรทัดคำสั่งของคุณหรืออ่านออนไลน์
Doug Harris

1

คุณสมบัติของมันและหลาย ๆ // จะถูกแทนที่เป็นหนึ่งเดียว /

มันมีประโยชน์ถ้าคุณมีตัวแปรที่มีเส้นทางเช่นตัวอย่างในตอนท้าย ดังนั้นซีดีของคุณจะไม่ได้รับข้อผิดพลาดใด ๆ และคุณไม่จำเป็นต้องเปลี่ยนตัวแปรเวิร์กสเปซ

MY_WORKSPACE = / home / your_username / พื้นที่ทำงาน /
MY_NEW_PROJECT = $ MY_WORKSPACE / my_proj /
cd $ MY_NEW_PROJECT 

เนื้อหาที่สมบูรณ์ของตัวแปรโครงการคือ

/ home / your_username / พื้นที่ทำงาน // my_proj /

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