Dlaczego wybrano dwukropek jako separator ścieżki


22

Dlaczego dwukropek ( :) został wybrany jako separator ścieżki?

Zauważ, że mam na myśli „separator ścieżki”, a nie „separator katalogu”. Separator ścieżek to symbol umieszczony między wpisami w PATHzmiennej środowiskowej.

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

Wszystko, co znajdowało się w komputerach i oprogramowaniu, było kiedyś świadomą decyzją podejmowaną przez kogoś. Na przykład dlaczego tylda reprezentuje katalog domowy (i dlaczego hjkl dla klawiszy kierunkowych w vi) . Lubię znać tło tej decyzji.


Kilka przypadkowych faktów:

Posiadanie dwukropka jako separatora ścieżki oznacza, że ​​do ścieżki nie można dodać katalogu z dwukropkiem w nazwie.

z POSIX:

Ponieważ <colon>w tym kontekście jest to separator, nazwy katalogów, które mogą być użyte w zmiennej PATH, nie powinny zawierać <colon>znaku.

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

Wydaje się, że ucieczka z jelita grubego nie jest możliwa. @ Random832 z przepełnienia stosu sprawdził PATH obsługujący kod źródłowy i nie znalazł mechanizmu zmiany znaczenia.

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


Jest to również separator dla /etc/passwd(który zawiera również ścieżki w kolumnach głównej i powłoki).
Stéphane Chazelas,


11
Wczoraj spędziłem około pół godziny, badając to pytanie. Przeczytałem Podręcznik programisty Unixa z 1971 r., Który określa użycie dwukropka, ale nie powód, dla którego dwukropek został wybrany zamiast (np.) Symbolu potoku. Przeczytałem również tyle, ile mogłem o Multics, ale najwyraźniej miał on tylko jeden katalog w PATH (więc nie ma potrzeby separatora). Wątpię, czy otrzymamy tutaj dobrą odpowiedź, ale jeśli istnieje szansa, że ​​jakiś weteran Unixa mógłby odpowiedzieć na to pytanie, chciałbym, aby mieli taką możliwość, więc głosuję, aby ponownie otworzyć.
Anthony G - sprawiedliwość dla Moniki

3
Nie mogło być zmienna powłoki / środowisko nazywane PATH przed wprowadzeniem Unix wersji 7 (w 1979 roku) , ale nie było :-delimited ścieżka wyszukiwania już w 1977.  PWB / Unix (programisty Workbench) stosowany w Mashey skorupę , napisany przez John R. Mashey , który chronologicznie spadł między skorupą Thompsona i skorupą Bourne'a. … (Ciąg dalszy)
G-Man mówi „Przywróć Monikę”

3
( Ciąg dalszy )…  Powłoka Mashey obsługiwała 26 zmiennych powłoki (zgadnij, jakie były ich nazwy) - a zmienną pbyła ścieżka wyszukiwania (zwana „sekwencją przeszukiwania katalogu powłoki w celu wykonania polecenia”), z katalogami oddzielonymi dwukropkami. …………………………………………………………… Ciekawostka: podczas gdy powłoka Mashey przetworzyła .profileplik, pozwoliła również określić $pwartość początkową w nazwie pliku .path.
G-Man mówi „Przywróć Monikę”

Odpowiedzi:


3

Po kilku kopaniach nie mam prawdziwej odpowiedzi, ale przynajmniej nowe informacje do dodania do tej rozmowy poparte pewnymi faktami historycznymi.

Oto Peter Chubb https://www.youtube.com/watch?v=Sye3mu-EoTI w jednym ze swoich wystąpień mówiących o powłoce, około 19:00 można usłyszeć, jak wspominał, dlaczego ejest aliasem domyślnego edytora w powłokach uniksowych dzieje się tak dlatego, że starsze terminale nie były tak wygodne ani łatwe w użyciu, a pisanie na nich było nieprzyjemnym doświadczeniem.

W tym przypadku wspomina o dokładnym modelu, https://en.wikipedia.org/wiki/Teletype_Model_33 .

Po kilku badaniach ( http://www.pdp8.net/asr33/asr33.shtml ) okazało się, że ta maszyna pozwala ci wybierać tylko w puli 64 znaków, nawet nie w pełni obsługuje ASCII w USA, 2 do potęgi 6 znaków , to 6-bitowa kombinacja.

Faktem jest, że ta maszyna w ogóle nie ma nic wspólnego z ASCII, co oznacza, że ​​nie obsługuje nawet pierwszych 64 znaków ASCII, chodzi tylko o zupełnie niepowiązany zestaw danych wejściowych i prawdopodobnie nie jest to standardowy (dla naszej współczesnej) zestaw znaków .

Teletyp ASR 33 może drukować 64 znaki, które były dozwolone tylko w przypadku DUŻYCH LITER, LITER i symboli.

z http://www.pdp8.net/asr33/asr33.shtml

a to tylko dowodzi, że zdecydowanie nie jest to US ASCII, biorąc pod uwagę fakt, że do obsługi wielkich liter naprawdę potrzebujesz więcej niż 6 bitów, wielkie litery są poza znakiem 64 znaków (lub wartością 63 w systemie dziesiętnym, jeśli chcesz podążać za tabelą)

    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 

Teraz wiemy, że otrzymujemy z tego 64 znaki, bez żadnego prawdziwego standardu do obsługi ich w zakodowanej tabeli, a także nie mamy małych liter, tylko wielkie litery oraz symbole i cyfry.

Dzięki tej stronie http://keyboards.jargon-file.org/#ASR33 mogę pokazać układ wejściowy takiej klawiatury

wprowadź opis zdjęcia tutaj

i naciskając SHIFT również dostajesz

wprowadź opis zdjęcia tutaj

Istnieje również nieco więcej informacji na temat kodowania fizycznych połączeń generujących znaki http://jargon-file.org/jargon-html/html/B/bit-paired-keyboard.html (strona wyjaśnia również, że ASR33 i znaki ASCII są różne do poziomu bitów).

Myślę, że warto zauważyć, że nie ma go {lub ma }tylko, (a )to oznacza, że ​​prawdopodobnie tworzenie podpowłok było w porządku, ale tworzenie nowych procesów prawdopodobnie nie było tak łatwe lub dozwolone przez terminal.

Ostatecznie nie sądzę, aby istniała prawdziwa odpowiedź naukowa , prawdopodobnie była to postać „wolna”, czekająca na specjalne znaczenie; jedno jest pewne: powłoki i terminale są starsze niż ASCII i myślenie o ASCII lub dowolnej tabeli kodowanej, jaką znamy dzisiaj, prawdopodobnie nie rozwiąże tajemnicy.


więcej na temat :znaku i powłoki stackoverflow.com/questions/3224878/…
user31223
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.