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

18

Por que o cólon ( : ) foi escolhido como separador de caminho?

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

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

Tudo em computadores e software já foi uma decisão deliberada de alguém em algum lugar. Por exemplo, por que til representa o diretório home (e por que hjkl para as teclas de direção no vi) . Eu gosto de saber o pano de fundo para esta decisão.

Alguns fatos aleatórios:

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

do POSIX:

Since <colon> is a separator in this context, directory names that might be used in PATH should not include a <colon> character.

link

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

link

    
por lesmana 21.09.2016 / 15:03

2 respostas

4

Depois de algumas pesquisas eu não tenho uma resposta real, mas pelo menos novas informações para adicionar a esta conversa, apoiadas por alguns fatos históricos.

Aqui está Peter Chubb link em um de seus discursos falando sobre o escudo, em torno do 19: 00 marcam que você pode ouvi-lo mencionar porque e é o alias para o editor padrão em shells unix, é porque os terminais mais antigos, onde não são tão confortáveis ou fáceis de usar, são uma experiência desagradável.

Ele está mencionando um modelo preciso, o link neste caso.

Depois de algumas pesquisas ( link ) eu acho que esta máquina só permite que você escolha um conjunto de 64 caracteres , nem mesmo suporte ASCII completo dos EUA, 2 à potência de 6 caracteres, é uma combinação de 6 bits.

Infact esta máquina não tem nada a ver com ASCII em tudo, o que significa que não é mesmo apoiar apenas os primeiros 64 caracteres de um ASCII, ele está indo apenas para um conjunto totalmente de entradas e provavelmente não padrão (para a nossa era moderna) conjunto de caracteres.

The ASR 33 teletype can print 64 characters which only allowed for UPPER CASE LETTERS, numbers, and symbols.

do link

e isto prova que definitivamente não é ASCII dos EUA dado o fato de 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 chars (ou o valor 63 em decimal se você quiser seguir uma mesa)

    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 mais símbolos e números.

Graças a este link , posso mostrar-lhe o layout de entrada deste teclado

epressionandoSHIFTvocêtambémobtém

Hátambémumpoucomaisdeinformaçõessobrecomoasconexõesfísicasquegeramoscaracteressãocodificadas link (a página também esclarece que os caracteres ASR33 e ASCII são diferentes até o nível de bits).

Acho interessante observar que não há { ou } , mas apenas ( e ) , o que significa que provavelmente a criação de subshells foi aceitável, mas a criação de novos processos provavelmente não foi tão fácil ou permitida por o terminal.

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

    
por 15.11.2016 / 22:42
-1

Pense nisso como uma resposta mais simples: a variável PATH, como muitas variáveis, é apenas um detentor de dados de campo "simples". Esses "buckets" de dados precisam ter alguns separadores padrão para organizar os dados em alguns arranjos diferentes para que o sistema possa usá-los um de cada vez ou todos ao mesmo tempo. Como toda esta informação acaba na memória do Sistema Operacional para algum outro software para localizar e usar, os dados devem ser de alguma forma configurados para que o software analise essas informações e retorne um dado válido para ser usado.

Agora, estou simplificando demais isso, mas você deve ser capaz de seguir a noção de dados aleatórios sendo lançados dentro de um DIMM de memória? Se você quiser usar algo ou encontrar algo, mesmo no escuro e não tiver uma lanterna, pode organizar suas coisas em caixas de sapatos com letras em relevo para que você possa "lê-las" sem qualquer luz.

Meu ponto é o sistema operacional precisa encontrar os dados, e a necessidade de separadores de campo foi uma questão de 1976, quando a Bell Labs começou a programar os sistemas operacionais UNIX dos velhos tempos. Alguém tinha a noção de que um cólon difícil (:) nunca deveria ser usado como um nome de arquivo (tudo no UNIX é tratado como um arquivo) e isso torna o ":" uma escolha muito boa como o separador "campo".

NOTA: Você ainda pode usar o ":" como parte do nome do arquivo ou diretório e usá-lo na instrução do caminho, escapando do ":" com uma barra "\" na instrução PATH, ou seja:

PATH=".:<mybin>:/bin:/sbin:/tmp/\:_mycolon_dir:/some_other_dir"
    
por 15.11.2016 / 14:47

Tags