Quando eu faço - em CD ..
vez de cd ..
isso me dá um erro dizendo -
CD: command not found
Por que o terminal diferencia maiúsculas de minúsculas quando se trata de comandos linux? Quero dizer que você deve ser capaz de executar o comando com caracteres "all uppercase" ou "all lowercase".
Eu sei que é devido a algum motivo, mas estou apenas curioso.
shell
user-interface
Hussain Tamboli
fonte
fonte
stty iuclc olcuc
se você sentir vontade de ter um terminal insensível caso ;-)Respostas:
Por fim, foi uma escolha arbitrária feita pelos criadores do Unix há mais de quatro décadas. Eles poderiam ter optado por tornar as coisas sem distinção entre maiúsculas e minúsculas, como os criadores do MS-DOS fizeram uma década depois, mas isso também tem suas desvantagens.
Está profundamente enraizado na cultura * ix para mudar agora. A questão do sistema de arquivos com distinção entre maiúsculas e minúsculas levantada pelo eppesuig é apenas parte dela. Os sistemas macOS - que são baseados em Unix - geralmente têm sistemas de arquivos que não diferenciam maiúsculas de minúsculas (mas preservam maiúsculas e minúsculas); portanto, esses comandos de sistemas externos ao shell são de fato tratados sem distinção entre maiúsculas e minúsculas. Porém, os componentes internos
cd
permanecem sensíveis a maiúsculas e minúsculas.Mesmo com um sistema de arquivos que não diferencia maiúsculas de minúsculas, a história das coisas conspira contra seus desejos, Hussain. Se eu digitar
ls
no meu Mac, recebo uma lista de diretórios coloridos. Se eu digitarLS
,/bin/ls
ainda será executado, mas a listagem não será colorida porque o alias que adiciona o-C
sinalizador diferencia maiúsculas de minúsculas.Melhor apenas se acostumar com isso. Se puder, aprenda a gostar.
fonte
Este não é um problema "terminal", é um recurso do sistema de arquivos. Como o shell deve procurar seus comandos no sistema de arquivos (sempre diferencia maiúsculas de minúsculas)?
fonte
bash
opção chamadacdspell
: tente encontrar o nome de arquivo correto, mesmo que você tenha digitado errado, mas está funcionando apenas para argumentos de comando .cd
,CD
,cD
eCd
cada um com um comportamento único.hash -p /bin/hostname HOSTNAME
e agoraHOSTNAME
é o comando para/bin/hostname
.set completion-ignore-case on
.Os sistemas técnicos que eu uso e respeito quase fazem distinção entre maiúsculas e minúsculas: seja sistema operacional ou linguagem de programação ou qualquer outra coisa.
As exceções que eu pude pensar agora são as tags HTML e algumas implementações do SQL e a linguagem de programação Ada.
Mesmo nesses casos, acho que há fortes tendências para realmente escrever tags HTML em minúsculas e a semântica de consultas SQL em maiúsculas (e parâmetros em maiúsculas). (Corrija-me se estiver errado.) Quanto ao Ada, o modo Emacs o corrigirá se você digitar, por exemplo, um nome de procedimento em minúsculas, embora isso não importe ao compilar. Portanto, mesmo quando há distinção entre maiúsculas e minúsculas, parece que as pessoas concordam que é uma má ideia.
O motivo é que você obtém um poder muito mais expressivo com distinção entre maiúsculas e minúsculas. Não só quantitativamente -
CD
é um, masCD
,Cd
,cD
, ecd
são quatro - mas mais importante, você pode expressar propósito, a ênfase, etc. usando maiúsculas e minúsculas de forma sensata; Além disso, ao programar, você aprimora a legibilidade.Intuitivamente, é claro que você não ler
hi
eHI
da mesma maneira!Mas, para dar um exemplo no mundo dos computadores, na linguagem de programação Ada (da década de 1980), a primeira linha de um bloco de código de procedimento pode ser assim:
como você vê, os nomes dos procedimentos e dos parâmetros são maiúsculos, assim como os tipos de dados, tudo o resto é minúsculo. Observe também que o nome do parâmetro "all uppercase" nos diz que é um acrônimo. Agora, compare isso com
Isso é possível, pois o Ada não diferencia maiúsculas de minúsculas (ou, para ser exato, o compilador o mudará para o primeiro exemplo, mas é claro que não mudará seu código). Ou, que tal:
Esse é um pouco ridículo, eu sei; mas alguém seria estúpido o suficiente para escrever dessa maneira (bem, talvez não). A questão é que um sistema que diferencia maiúsculas de minúsculas não apenas força as pessoas a serem consistentes, mas também é ajudado por elas (legibilidade) e as utiliza em proveito próprio (exemplo de acrônimo acima).
fonte
length
eLength
geralmente é uma má idéia :)DEFine PROCedure Hello
por exemplo. Você só precisava digitar os bits em maiúscula, mas a palavra completa aparecia nas listagens de programas. Este aplicado aREMark
, também, e não era tão chato ...Não é mais ou menos estranho do que o fato de termos um alfabeto maiúsculo e minúsculo. Se você olhar
/usr/bin
, notará que alguns executáveis exploram letras maiúsculas.Um espaço para nome com distinção entre maiúsculas e minúsculas não é apenas duas vezes maior que um espaço insensitivo - a diferença cresce exponencialmente com o tamanho da palavra. Por exemplo, usando 26 caracteres, existem 26 ^ 3 (17576) possibilidades diferentes em três letras; usando 52 (2 * 26) caracteres, existem 52 ^ 3 = 140608. Um espaço para nome aberto é uma coisa boa;)
fonte
O conceito de maiúsculas / minúsculas pode ser (e é de fato) uma coisa específica de localidade, que, como qualquer outra complicação de design, deve ser empurrada o mais próximo possível do ponto de uso na pilha de aplicativos, não fazer parte do testemunho.
Ter um ambiente que diferencia maiúsculas de minúsculas permite envolvê-lo em um ambiente que não diferencia maiúsculas de minúsculas, mas não o contrário.
fonte
Não é o terminal, é o sistema de arquivos. Ou no caso de
cd
(cd é um shell incorporado) o shell, que diferencia maiúsculas de minúsculas.Poderia ter sido possível (pelo menos com ASCII), fazer distinção entre maiúsculas e minúsculas. Isso é mais difícil com o unicode agora usado (se dois caracteres são iguais, podem depender do local).
o que fazer sobre isso
shopt -s nocaseglob
#isso está na minha~/.bashrc
shopt -s nocasematch
#estaria também em~/.bashrc
set completion-ignore-case on
#isso está na minha~/.inputrc
fonte
Como ponto de partida, o motivo pelo qual essa pergunta foi feita e o motivo pelo qual você encontrará muita discussão se pesquisar no assunto é que a distinção entre maiúsculas e minúsculas torna mais difícil para as pessoas "normais" aprenderem e usarem uma linguagem de programação ou linha de comando interface.
A distinção entre maiúsculas e minúsculas tem origem no baixo poder dos computadores no passado. Para tornar as coisas sem distinção entre maiúsculas e minúsculas, era necessária uma operação de análise adicional antes que o comando fosse enviado ao intérprete ou a um compilador antes de sua execução e os primeiros projetistas não estavam preparados para desperdiçar a energia do computador para a conveniência da distinção entre maiúsculas e minúsculas.
Eu acredito que há uma série de afirmações incorretas nos comentários feitos acima. Em primeiro lugar, os psicólogos lhe dirão que os humanos não discriminam automaticamente entre uma palavra escrita em letras maiúsculas ou minúsculas ou mesmo uma combinação das duas em termos de significado da palavra. Case é usado em linguagens expressivas normais para transmitir um significado adicional. Por exemplo, o uso de uma letra maiúscula iniciando uma palavra em uma frase indica que provavelmente é um nome próprio. Letras maiúsculas também são usadas para dar estrutura à prosa. Por exemplo, uma letra maiúscula é usada para indicar o início de uma frase. Mas "Palavra" e "palavra" são vistas pela mente humana como significando o mesmo.
Os criadores do DOS e da ADA e Pascal, para citar alguns, gostaram do fato de que a distinção entre maiúsculas e minúsculas era um fardo adicional para o iniciante. Mais tarde, os editores de texto em "Ambientes de Desenvolvimento Integrado" (IDEs), reconhecendo uma palavra de reserva, poderiam reformular essa palavra de modo que fosse consistente com o estilo; além de exibi-lo em uma cor diferente para destacar a palavra. Portanto, o argumento de que a distinção entre maiúsculas e minúsculas cria um código mais legível é falacioso. Não é para pessoas "normais". Ele simplesmente adiciona uma camada desnecessária e às vezes confusa a uma tarefa já exigente.
Java é um exemplo extremo de uma linguagem muito ruim do ponto de vista da facilidade de uso por um iniciante. Ele impõe uma estrita distinção entre maiúsculas e minúsculas, mas, estupidamente, permitirá que o programador tenha duas funções, ambas com o mesmo nome, mas que na verdade são funções diferentes em virtude de um ter um conjunto diferente de argumentos para o outro. De fato, Java é um aborto tão grande que, quando as universidades passaram do ensino da sintaxe de Pascal para os estudantes, realizando cursos de ciências não relacionadas à computação, a taxa de aprovação caiu de 70% para 40%.
Então, em resumo, a distinção entre maiúsculas e minúsculas surgiu por dois motivos. Um deles foi a falta de energia do computador. A segunda foi que as pessoas que ingressam na ciência da computação geralmente estão no espectro autista e não se relacionam bem com as necessidades das pessoas "normais". Como conseqüência, essas pessoas não podem compreender que a distinção entre maiúsculas e minúsculas é desnecessária e um impedimento para aprender e usar uma linguagem de programação.
fonte
A distinção entre maiúsculas e minúsculas é uma idéia tola que surgiu porque os escritores do Unix não entendiam que o ASCII foi projetado para ser facilmente insensível a maiúsculas e minúsculas. Um simplesmente ignora os bits iniciais. Ascii é uma codificação de 7 bits com capital A no valor decimal 65 650000001 e a no bit decimal 97 1100001. com as letras que seguem alfabeticamente. Isso gerou todo tipo de idéias, como todas as chaves nos pares de valores-chave, devem ser numéricas para evitar que Chinelos sejam diferentes dos chinelos. O banco de dados Pick Multi-Value percebeu isso desde o início e não diferencia maiúsculas de minúsculas.
fonte