Eu acho que o bash está tropeçando em algumas anomalias na maneira como os caracteres acentuados são tratados. Você pode pegar um pouco de pipoca, porque isso será técnico por um tempo ...
O Unicode permite que alguns caracteres acentuados sejam representados de várias maneiras diferentes: como um "ponto de código" representando o caractere acentuado ou como uma série de pontos de código representando a versão não acentuada do caractere, seguida pelo (s) acento (s). Por exemplo, "ä" pode ser representado pré-composto como U + 00E4 (UTF-8 0xc3a4, letra minúscula latina 1 com diérese) ou decomposto como U + 0061 U + 0308 (UTF-8 0x61cc88, letra minúscula latina a + diaeresis combinada )
O sistema de arquivos HFS + do OS X exige que todos os nomes de arquivos sejam armazenados na representação UTF-8 de sua forma totalmente decomposta . Em um nome de arquivo HFS +, "ä" DEVE ser codificado como 0x61cc88 e "ö" DEVE ser codificado como 0x6fcc88.
Tenho certeza de que o que está acontecendo aqui é que, quando você digita "Näyttökuva.png" na linha de comando, está "digitando" os caracteres na forma pré-composta. Quando o arquivo é criado, o sistema de arquivos decompõe os caracteres para armazenamento. Está tudo bem até agora. Mas quando você tenta usar o preenchimento de tabulação começando com "Nä", acho que o bash está falhando em decompor o "ä" antes de procurar por correspondências e, é claro, não encontra nenhuma.
Para ilustrar a diferença, aqui está um exemplo de qual codificação é usada quando eu apenas digito "Näyttökuva.png" na linha de comando, vs.
$ printf Näyttökuva.png | xxd # This time I pasted the it in from this web page
0000000: 4ec3 a479 7474 c3b6 6b75 7661 2e70 6e67 N..ytt..kuva.png
$ touch Näyttökuva.png # Also pasted from the web
$ printf Näyttökuva.png | xxd # This time I tab-completed it after N
0000000: 4e61 cc88 7974 746f cc88 6b75 7661 2e70 Na..ytto..kuva.p
0000010: 6e67 ng
Agora, quanto à questão de os personagens se perderem ao excluir e refazer a tabulação, suspeito que isso esteja intimamente relacionado. Especificamente, acho que o bash está "excluindo" um ponto de código por pressionamento da tecla delete, mas apagando um caractere da janela Terminal por pressionamento. Como um dos caracteres excluídos ("ö" desta vez) consistia em dois pontos de código, mas apenas um caractere, a tela do Terminal fica fora de sincronia. Tente completar com tabulação o nome do arquivo inteiro, excluindo-o de volta para "Näytt" e, em seguida, preenchendo novamente a tabulação: o bash parece pensar que apenas a diérese combinada foi excluída, e não o "ö" inteiro, por isso, adiciona novamente a diátese combinada , mas desta vez anexa ao "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Observe que, quando pressiono return, o bash realmente tem o nome do arquivo inteiro; é apenas a tela do Terminal que estava confusa.
O TL; DR bash possui alguns bugs que lidam com caracteres acentuados decomponíveis.
EDIT: após algumas ponderações, acho que a única solução completa é corrigir o bash (/ aguarde seus desenvolvedores corrigi-lo). Também pode haver uma maneira de inserir caracteres em forma decomposta, mas não tenho idéia do que seria. Mas encontrei algumas soluções parciais:
Arraste e solte um arquivo das pastas do Finder em sua forma correta. Como o Finder obtém o nome do arquivo do sistema de arquivos, ele já está decomposto, então funciona.
Você pode realmente tab-complete o próprio personagem acentuado. Por exemplo, se você digitar "Na" e depois tab, corresponderá a "Näyttökuva.png" porque a decomposição canônica de "ä" começa com "a". Mas se você tiver um arquivo chamado "Narwal.gif" no mesmo diretório, isso não será muito útil ...
Eu não testei isso, mas se você vincular a guia ao menu completo em vez de completo, deverá permitir a seleção de possíveis correspondências para que você possa selecionar o que deseja, mesmo que não possa digitar a próxima letra. (Ou você pode vinculá-lo a um pressionamento de tecla diferente, para poder usá-lo apenas quando precisar.)
Para corrigir o problema com a exibição do Terminal fora de sincronia, você pode vincular algo à redesenho da linha atual - isso não impedirá que o problema aconteça, mas permitirá que você ressincronize a exibição.
$ echo -e "N\xC3\xA4*" | ls
(o eco dáNä*
) resultadosNäyttökuva.png
. O problema existe também com os outros shells no Mac OS; e com, por exemplo, o zshls N
é auto-completado em #ls Na<0308>ytto<0308>kuva.png
ls Nä*
no bash no Xubuntu e ele funcionou corretamente, por isso é um bug entre o teclado e o OS X e o Terminal. Também testei isso na partição Bootcamp, mas o problema persiste (isto é, não acontece apenas com arquivos HFS +).Na
funciona, masNay
não (embora seja compreensível porque realmente existe¨
entre oa
ey
. No Xubuntuls Na*
não funciona (emboraNä*
funcione, portanto não é realmente um problema). substituindoä
eö
coma?
eo?
exls Na?y*
claro que isso aumenta a ambiguidade, mas pode vir a calhar em alguns casos..ls N* | xxd
no Xubuntu, ele fornece caracteres compostos ou decompostos?touch $'Na\xcc\x88ytto\xcc\x88kuva.png'
e veja o que acontece - meu palpite é que ele criará um novo arquivo com um nome muito semelhante.Esta é uma pergunta antiga e não há resposta definitiva. Apenas soluções alternativas.
No entanto, combinei algumas informações deste guia antigo e como sugerido e instruído aqui :
Instalei uma festança mais recente no meu Snow Leopard. Após a instalação, a conclusão do bash funciona corretamente! (Snow Leopard enviado com 3.2.48 (1) e MacPorts instalado 4.2.45_1). Lembre-se de fazer as alterações em
/etc/shells
execuçãochsh
.Além disso, por causa de algumas outras instruções, tenho
.inputrc
:Não tenho certeza se eles são necessários ou não para uma operação adequada.
fonte
Nä
(ondeä
é pré-composto),Näyttökuva.png
mas o bash 3.2 não.iconv
é a solução que funcionou para mim:consulte /programming//a/23226449/1909531
fonte