O bash não diferencia maiúsculas de minúsculas do OSX?


79

Os comandos bash no OSX não fazem distinção entre maiúsculas e minúsculas? Eu digito "what TR" e mostra / usr / bin / TR, embora não exista esse binário lá. A mesma coisa para outros binários, quando capitalizados. Ou o Terminal.app talvez esteja fazendo esta tradução? Como faço para desativar isso?


Por curiosidade, por que você deseja desativar isso?
Sören Kuklau

Esta é uma pergunta espetacular. Bash tem um nocaseglob opção para controlar se os casos partida em intervalos, mas este pouco de malandragem é mais profundo do que o normal localee conclusão-ignore-case / nocaseglob
bmike

3
O motivo pelo qual eu queria desligá-lo é realmente bobo. Estou acostumado com a distinção entre maiúsculas e minúsculas ao trabalhar no shell. Só estou preocupado que esse recurso me atrapalhe. Exemplo, eu escrevo um script bash, tipo de erro 'lS'; o script funcionará bem no OSX. Eu o movo para a minha caixa cenTOS e ela quebra. Concedido, isso seria fácil de detectar e corrigir, mas poderia evitar completamente o cenário se eu pudesse manter os scripts funcionando da mesma maneira entre os dois sistemas. Descobri isso por acidente, e até agora não foi um incômodo, então provavelmente não passarei pelo exercício de mudar os sistemas de arquivos apenas por isso.
Verboze 19/08

5
O motivo pelo qual você deseja desativar isso é que a distinção entre maiúsculas e minúsculas causa problemas para alguns aplicativos, como o SVN. O globbing sem distinção entre maiúsculas e minúsculas pode ser útil, mas o SVN fica muito confuso se você criar um arquivo chamado "Foo" e, de alguma forma, o repositório criará uma referência a "foo".

Outro motivo para desativar: Eu tenho um script ~ / bin / CC no meu caminho desde cerca de 1980. cc, além de alguns padrões agradáveis. Ele trabalhou do UNIX v6 a v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... e falhou pela primeira vez no MacOS, com recursão infinita.
Krazy Glew

Respostas:


94

Este é realmente um recurso do sistema de arquivos do seu disco, não do bash ou do Terminal.app.

O HFS + (o sistema de arquivos Mac) geralmente é configurado para não fazer distinção entre maiúsculas e minúsculas, mas preservá-las . Isso significa que o sistema de arquivos considerará fooe FoOserá o mesmo, mas quando você criar um novo arquivo, ele lembrará quais letras foram maiúsculas e quais não foram.

Ao formatar um disco com HFS +, você pode escolher se o sistema de arquivos deve diferenciar maiúsculas de minúsculas ou não. Se você optou por formatar com o UFS (Unix FileSystem), ele sempre diferencia maiúsculas de minúsculas, AFAIK.

Para verificar se um disco faz distinção entre maiúsculas e minúsculas, execute:

 diskutil info <device>

Por exemplo:

 diskutil info disk0s2

Procure a Name:linha. Se ler algo parecido Mac OS Extended (Case-sensitive, Journaled), significa que diferencia maiúsculas de minúsculas. Se apenas ler Mac OS Extended(sem o Case-sensitive), será apenas preservação de maiúsculas, mas não diferencia maiúsculas de minúsculas .


6
Fora do Unix, o caso de preservar a natureza não é tão incomum. Por exemplo, o NTFS é semelhante: não diferencia maiúsculas de minúsculas por padrão, mas é possível formatá-lo. Eu também acho que o caso que não diferencia maiúsculas de minúsculas é o padrão , via Mac OS 9, mas o fato de muitos desenvolvedores de Mac e Windows serem preguiçosos nesse aspecto e não se importarem com o revestimento correto torna quase impossível mudar para maiúsculas e minúsculas como padrão. , quebra muitos aplicativos. Vindo do Unix, achei muito estranho no começo também.
DarkDust 17/08/11

1
Devo admitir que nunca usei o Mac OS clássico, por isso estava supondo. De qualquer forma, esta é a resposta, e o DarkDust colocou isso melhor do que eu, então este deve ser aceito, eu acho.
stuffe

6
Todas as versões do Mac OS não diferenciam maiúsculas de minúsculas, mas preservam, por motivos de usabilidade. Enquanto o UNIX favorece a precisão (comparações de bytes por nomes de arquivos), pode ser um pesadelo de usabilidade para os usuários finais que salvam acidentalmente 'Resume' e 'REsume' e ficam confusos quando abrem a versão errada e todas as alterações desaparecem. .
Dan Udey 17/08/19

2
Por outro lado, também pode ser um "pesadelo da usabilidade" ao digitar "HEAD" nos resultados da linha de comando no programa / usr / bin / head (mostra as primeiras linhas de um arquivo) sendo executado em vez de / usr / local / bin / HEAD (do LWP: faça uma solicitação HTTP 'HEAD').
TML

2
Pensando que para cada caractere maiúsculo existe um equivalente em minúscula e vice-versa, é típico dos programadores que falam inglês e não é independente da localidade. Não sei qual solução foi adotada para o turco, onde existe a minúscula pontilhada icorrespondente à maiúscula İDOTTED, enquanto a maiúscula sem ponto Icorresponde à minúscula DOTLESS ı, mas QUALQUER solução será ruim. E o alemão ß, muitas vezes capitalizado com 2 Ss? E sotaques que geralmente são deixados de fora ao capitalizar? E ... A sensibilidade do caso acaba com todas essas dores de cabeça.
Walter Tross

5

Dê uma olhada no seu sistema de arquivos, pois há variações entre maiúsculas e minúsculas no HFS. O padrão não faz distinção entre maiúsculas e minúsculas; nesse caso, não é tanto o caso do BASH, mas o sistema de arquivos subjacente. Você pode testar isso formatando um pendrive USB sobressalente com a opção sensível a maiúsculas e minúsculas e copiando arquivos após repetir o teste, etc.



1

O Bash é definitivamente sensível a maiúsculas e minúsculas.

Eu apenas digitei 'whoami' no terminal e o botão caps lock estava ativado.

Eu recebi uma resposta completamente diferente de `WHOAMI '.

Eu posso ver que existe um comando WHOAMI com 'what', mas não consigo encontrá-lo com 'ls'.


4
Este não é o shell que diferencia maiúsculas de minúsculas, é o whoamipróprio programa. Na verdade, é o mesmo programa que id, mas verifica qual nome foi executado e usa uma saída diferente (equivalente a id -un) se executada sob o nome "whoami". Essa verificação é sensível a maiúsculas. Compare a saída de id, WHOAMI, WhOaMi, WhoAmI, etc. Além disso, comparar a saída da ls -li /usr/bin/whoamivs ls -li /usr/bin/WHOAMIe observe que o número inode (a primeira coisa listado na saída) é o mesmo - eles são duas formas diferentes de especificar o mesmo arquivo exato .
Gordon Davisson
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.