Por que o cólon foi escolhido como separador de caminho


22

Por que dois-pontos ( :) foi escolhido como separador de caminho?

Note que eu quero dizer "separador de caminho" e não "separador de diretório". Separador de caminho é o símbolo colocado entre as entradas na PATHvariável de ambiente.

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

Tudo em computadores e software já foi uma decisão deliberada tomada por alguém em algum lugar. Por exemplo, por que til representa o diretório inicial (e por que hjkl para chaves de direção no vi) . Eu gosto de conhecer os antecedentes desta decisão.


Alguns fatos aleatórios:

Ter dois pontos como separador de caminho significa que o diretório com dois pontos no nome não pode ser adicionado ao caminho.

do POSIX:

Como <colon>é um separador nesse contexto, os nomes de diretório que podem ser usados ​​no PATH não devem incluir um <colon>caractere.

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

Parece não ser possível escapar do cólon. @ Random832 da Stack Overflow inspecionou o código-fonte que manipula PATH e não encontrou nenhum mecanismo de escape.

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


Esse também é o separador para /etc/passwd(que também contém caminhos nas colunas inicial e shell).
Stéphane Chazelas


11
Ontem, passei cerca de meia hora pesquisando essa questão. Eu li o Manual do Programador Unix de 1971, que especifica o uso de dois pontos, mas não a razão pela qual os dois pontos foram escolhidos sobre (por exemplo) símbolo de tubo. Eu também li o máximo que pude sobre o Multics, mas, aparentemente, só tinha um diretório em seu PATH (portanto, não há necessidade de separador). Duvido que tenhamos uma boa resposta aqui, mas se houver uma chance de que algum usuário veterano do Unix possa responder a essa pergunta, eu gostaria que eles tivessem a oportunidade, então estou votando para reabrir.
Anthony G - justice para Monica

3
Talvez não houvesse uma variável shell / ambiente chamada PATH antes da introdução do Unix versão 7 (em 1979) , mas havia um :caminho de pesquisa delimitado em 1977. O  PWB / Unix (Programmer's Workbench) usou o shell Mashey , escrito por John R. Mashey , que caiu cronologicamente entre a casca de Thompson e a casca de Bourne. … (Continua)
G-Man diz 'Restabelecer Monica

3
(Continua)…  O shell Mashey suportava 26 variáveis ​​de shell (adivinhe quais eram seus nomes) - e a variável pera o caminho de pesquisa (chamado “a sequência de pesquisa de diretório do Shell para execução de comandos”), com diretórios separados por dois pontos. ………………………………………………………… Curiosidade: enquanto o shell Mashey processava o .profilearquivo, também permitia especificar um $pvalor inicial no arquivo chamado .path.
G-Man Diz 'Reinstate Monica'

Respostas:


3

Após algumas pesquisas, não tenho uma resposta real, mas pelo menos novas informações a serem acrescentadas a essa conversa, apoiadas por alguns fatos históricos.

Aqui está Peter Chubb https://www.youtube.com/watch?v=Sye3mu-EoTI em um de seus discursos falando sobre o shell, por volta da marca das 19:00 você pode ouvi-lo mencionando por que eo alias do editor padrão é nos shells unix, é porque os terminais mais antigos, onde não são tão confortáveis ​​ou fáceis de usar e digitar neles, foram uma experiência desagradável.

Ele está mencionando um modelo preciso, o https://en.wikipedia.org/wiki/Teletype_Model_33 neste caso.

Depois de alguma pesquisa ( http://www.pdp8.net/asr33/asr33.shtml ), acho que essa máquina permite que você escolha apenas um conjunto de 64 caracteres, nem mesmo suporte ASCII dos EUA completo, 2 com a potência de 6 caracteres , é uma combinação de 6 bits.

De fato, esta máquina não tem nada a ver com ASCII, o que significa que nem mesmo suporta apenas os primeiros 64 caracteres de um ASCII, mas apenas um conjunto de entradas totalmente independentes e provavelmente não padrão (para a era moderna). .

O teletipo ASR 33 pode imprimir 64 caracteres, o que permite apenas letras maiúsculas, números e símbolos.

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

e isso apenas prova que definitivamente não é US ASCII, considerando que, para suportar letras maiúsculas, você realmente precisa de mais de 6 bits, as letras maiúsculas estão além da marca de 64 caracteres (ou o valor 63 em decimal, se você quiser seguir uma tabela)

    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 

Agora sabemos que obtemos 64 caracteres dessa coisa, sem nenhum padrão real para apoiá-los na tabela codificada e também não temos letras minúsculas, apenas letras maiúsculas e símbolos e números.

Graças a este site http://keyboards.jargon-file.org/#ASR33 , posso mostrar o layout de entrada desse teclado

insira a descrição da imagem aqui

e pressionando SHIFT você também terá

insira a descrição da imagem aqui

Também há um pouco mais de informações sobre como as conexões físicas que geram os caracteres são codificadas http://jargon-file.org/jargon-html/html/B/bit-paired-keyboard.html (a página também esclarece que o ASR33 e caracteres ASCII são diferentes até o nível de bit).

Eu acho que é interessante notar que não existem {ou }mas apenas (e )que significa que, provavelmente, criando subshells foi ok, mas a criação de novos processos foi provavelmente não é tão fácil ou permitidos pelo terminal.

No final, não acho que exista uma resposta científica real , provavelmente era um personagem "livre" esperando por um significado especial; uma coisa é certa: os shells e os terminais são mais antigos que o ASCII e pensar em ASCII ou em qualquer tabela codificada como a conhecemos hoje provavelmente não resolverá o mistério.


mais sobre o :sinal e o shell stackoverflow.com/questions/3224878/…
user31223
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.