เหตุใดจึงเลือกลำไส้ใหญ่เป็นตัวแยกเส้นทาง


22

เหตุใดจึง:เลือกcolon ( ) เป็นตัวคั่นพา ธ

โปรดทราบว่าฉันหมายถึง "path separator" และไม่ใช่ "directory separator" ตัวคั่นพา ธ เป็นสัญลักษณ์ที่อยู่ระหว่างรายการในPATHตัวแปรสภาพแวดล้อม

PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:..."
                     ^ this symbol

ทุกสิ่งทุกอย่างในคอมพิวเตอร์และซอฟต์แวร์เป็นการตัดสินใจโดยเจตนาของใครบางคน ยกตัวอย่างว่าทำไมตัวหนอนหมายถึง dir บ้าน (และทำไม hjkl สำหรับปุ่มทิศทางใน vi) ฉันชอบที่จะรู้พื้นฐานสำหรับการตัดสินใจครั้งนี้


ข้อเท็จจริงบางอย่างแบบสุ่ม:

การมีโคลอนเป็นตัวคั่นพา ธ หมายความว่าไม่สามารถเพิ่มไดเร็กทอรีที่มีโคลอนในชื่อในพา ธ

จาก POSIX:

เนื่องจาก<colon>เป็นตัวคั่นในบริบทนี้ชื่อไดเรกทอรีที่อาจใช้ใน PATH ไม่ควรมี<colon>อักขระ

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html

ดูเหมือนจะเป็นไปไม่ได้ที่จะหนีจากลำไส้ใหญ่ @ Random832 จาก Stack Overflow ตรวจสอบซอร์สโค้ดการจัดการ PATH และไม่พบกลไกการหลบหนี

/programming/14661373/how-to-escape-colon-in-path-on-unix


นอกจากนี้ยังเป็นตัวคั่นสำหรับ/etc/passwd(ที่มีเส้นทางในคอลัมน์บ้านและเปลือก)
Stéphane Chazelas


11
ฉันใช้เวลาประมาณครึ่งชั่วโมงเมื่อวานนี้ค้นคว้าคำถามนี้ ฉันอ่านคู่มือของ Unix Programmer ปี 1971 ซึ่งระบุการใช้โคลอน แต่ไม่ใช่เหตุผลว่าทำไมเครื่องหมายโคลอนจึงถูกเลือกเหนือสัญลักษณ์ไพพ์ (เช่น) ฉันยังอ่านมากที่สุดเท่าที่จะทำได้เกี่ยวกับ Multics แต่เห็นได้ชัดว่ามีเพียงไดเรกทอรีเดียวใน PATH (ไม่จำเป็นต้องมีตัวคั่น) ฉันสงสัยว่าเราจะได้คำตอบที่ดีที่นี่ แต่ถ้ามีโอกาสที่ผู้ใช้ Unix รุ่นเก๋าสามารถตอบคำถามนี้ได้ฉันต้องการให้พวกเขามีโอกาสดังนั้นฉันจึงโหวตให้เปิดใหม่อีกครั้ง
Anthony G - ความยุติธรรมสำหรับโมนิกา

3
อาจไม่มีตัวแปรเชลล์ / สภาพแวดล้อมที่ถูกเรียก PATHก่อนการเปิดตัวUnix เวอร์ชัน 7 (ในปี 1979)แต่มี:เส้นทางการค้นหาแบบ จำกัด เขตตั้งแต่ปี 1977  PWB / Unix (โปรแกรมเมอร์ของ Workbench)ใช้เชลล์ Masheyซึ่งเขียนโดยJohn R. Masheyซึ่งตกลงตามลำดับระหว่างเปลือก Thompson และ Bourne shell … (ต่อ)
G-Man พูดว่า 'Reinstate Monica'

3
(ต่อ) ...  เชลล์ Masheyสนับสนุนตัวแปรเชลล์ 26 ตัว (เดาว่าชื่อของพวกเขาคืออะไร) - และตัวแปรpคือพา ธ การค้นหา (เรียกว่า "ลำดับการค้นหาไดเร็กทอรีเชลล์สำหรับการดำเนินการคำสั่ง") โดยมีไดเร็กทอรีคั่นด้วยโคลอน ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... สนุกจริง: ในขณะที่เปลือก Mashey การประมวลผล.profileไฟล์ก็ยังได้รับอนุญาตให้คุณสามารถระบุเริ่มต้นค่าในไฟล์ที่เรียกว่า$p .path
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


3

หลังจากการขุดบางครั้งฉันไม่มีคำตอบที่แท้จริง แต่อย่างน้อยก็มีข้อมูลใหม่ที่จะเพิ่มในการสนทนานี้ซึ่งสนับสนุนโดยข้อเท็จจริงทางประวัติศาสตร์บางอย่าง

นี่คือ Peter Chubb https://www.youtube.com/watch?v=Sye3mu-EoTIหนึ่งในสุนทรพจน์ของเขาที่พูดถึงเชลล์ประมาณ 19:00 น. คุณสามารถได้ยินเขาพูดถึงเหตุผลว่าทำไมeนามแฝงสำหรับเครื่องมือแก้ไขเริ่มต้น ในเชลล์ยูนิกซ์เป็นเพราะเทอร์มินัลรุ่นเก่าที่ไม่สะดวกสบายหรือใช้งานง่ายและการพิมพ์ลงบนนั้นเป็นประสบการณ์ที่ไม่พึงประสงค์

เขากำลังพูดถึงโมเดลที่แม่นยำhttps://en.wikipedia.org/wiki/Teletype_Model_33ในกรณีนี้

หลังจากการวิจัยบางอย่าง ( http://www.pdp8.net/asr33/asr33.shtml ) ฉันพบว่าเครื่องนี้ให้คุณเลือกได้เพียงพูล 64 ตัวอักษรไม่สนับสนุน ASCII แบบเต็มของสหรัฐฯ 2 ถึง 6 ตัวอักษร มันเป็นการรวมกัน 6 บิต

Infact เครื่องนี้ไม่มีอะไรเกี่ยวข้องกับ ASCII เลยหมายความว่ามันไม่ได้สนับสนุนเพียง 64 chars แรกของ ASCII เท่านั้นมันเป็นเพียงชุดอินพุตที่ไม่เกี่ยวข้องทั้งหมดและอาจไม่ใช่ชุดอักขระ (สำหรับยุคสมัยใหม่ของเรา) .

เครื่องพิมพ์ดีด ASR 33 สามารถพิมพ์ได้ 64 ตัวอักษรซึ่งอนุญาตเฉพาะกับตัวอักษรที่ขึ้นบนตัวพิมพ์ตัวเลขและสัญลักษณ์เท่านั้น

จากhttp://www.pdp8.net/asr33/asr33.shtml

และนี่เป็นข้อพิสูจน์ได้ว่าไม่ใช่ ASCII ของสหรัฐฯเนื่องจากความจริงที่ว่าเพื่อสนับสนุนตัวอักษรตัวพิมพ์ใหญ่ที่คุณต้องการมากกว่า 6 บิตตัวอักษรตัวพิมพ์ใหญ่จะเกินเครื่องหมาย 64 ตัวอักษร (หรือค่า 63 เป็นทศนิยมหากคุณต้องการติดตามตาราง)

    0 NUL    16 DLE    32      48 0    64 @    80 P    96 `   112 p 
    1 SOH    17 DC1    33 !    49 1    65 A    81 Q    97 a   113 q 
    2 STX    18 DC2    34 "    50 2    66 B    82 R    98 b   114 r 
    3 ETX    19 DC3    35 #    51 3    67 C    83 S    99 c   115 s 
    4 EOT    20 DC4    36 $    52 4    68 D    84 T   100 d   116 t 
    5 ENQ    21 NAK    37 %    53 5    69 E    85 U   101 e   117 u 
    6 ACK    22 SYN    38 &    54 6    70 F    86 V   102 f   118 v 
    7 BEL    23 ETB    39 '    55 7    71 G    87 W   103 g   119 w 
    8 BS     24 CAN    40 (    56 8    72 H    88 X   104 h   120 x 
    9 HT     25 EM     41 )    57 9    73 I    89 Y   105 i   121 y 
   10 LF     26 SUB    42 *    58 :    74 J    90 Z   106 j   122 z 
   11 VT     27 ESC    43 +    59 ;    75 K    91 [   107 k   123 { 
   12 FF     28 FS     44 ,    60 <    76 L    92 \   108 l   124 | 
   13 CR     29 GS     45 -    61 =    77 M    93 ]   109 m   125 } 
   14 SO     30 RS     46 .    62 >    78 N    94 ^   110 n   126 ~ 
   15 SI     31 US     47 /    63 ?    79 O    95 _   111 o   127 DEL 

ตอนนี้เรารู้แล้วว่าเราได้รับ 64 chars จากสิ่งนี้โดยไม่มีมาตรฐานจริง ๆ เพื่อสนับสนุนพวกเขาในตารางรหัสและเรายังไม่มีตัวอักษรพิมพ์เล็กเพียงแค่ตัวพิมพ์ใหญ่และสัญลักษณ์และตัวเลข

ขอบคุณเว็บไซต์นี้http://keyboards.jargon-file.org/#ASR33ฉันสามารถแสดงรูปแบบการป้อนข้อมูลของแป้นพิมพ์ดังกล่าวให้คุณทราบ

ป้อนคำอธิบายรูปภาพที่นี่

และโดยการกด SHIFT คุณก็จะได้รับ

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ยังมีข้อมูลเพิ่มเติมอีกเล็กน้อยเกี่ยวกับวิธีการเชื่อมต่อทางกายภาพที่สร้างอักขระที่ถูกเข้ารหัสhttp://jargon-file.org/jargon-html/html/B/bit-paired-keyboard.html (หน้ายังอธิบายว่า ASR33 และ ASCII chars นั้นแตกต่างกันไปจนถึงระดับบิต)

ฉันคิดว่ามันน่าสนใจที่จะทราบว่ามี{หรือไม่}เพียง แต่(และ)หมายความว่าอาจสร้าง subshells ก็โอเค แต่การสร้างกระบวนการใหม่อาจไม่ง่ายหรือได้รับอนุญาตจากสถานี

ในท้ายที่สุดฉันไม่คิดว่ามีคำตอบทางวิทยาศาสตร์จริงๆ มันอาจเป็นตัวละคร "ฟรี" ที่กำลังรอความหมายพิเศษ สิ่งหนึ่งคือ shure สรรพสินค้า: เปลือกหอยและเทอร์มินัลเก่ากว่า ASCII และคิดเกี่ยวกับ ASCII หรือตารางรหัสใด ๆ ที่เรารู้ว่าพวกเขาในวันนี้อาจจะไม่แก้ปัญหาความไม่แน่นอน


ข้อมูลเพิ่มเติมเกี่ยวกับ:สัญลักษณ์และเชลล์stackoverflow.com/questions/3224878/…
user31223
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.