Myślę, że bash potyka się o pewne anomalie w sposobie traktowania znaków akcentowanych. Możesz wziąć trochę popcornu, ponieważ będzie to trochę techniczne ...
Unicode pozwala na reprezentację niektórych znaków akcentowanych na kilka różnych sposobów: jako „punkt kodowy” reprezentujący znak akcentowany lub jako szereg punktów kodowych reprezentujących nieakcentowaną wersję znaku, a następnie akcent (y). Na przykład „ä” może być reprezentowane albo jako U + 00E4 (UTF-8 0xc3a4, łacińska mała litera 1 z diaeresy) lub rozkładane jako U + 0061 U + 0308 (UTF-8 0x61cc88, mała łacińska a + łącząca diaeresis ).
System plików HFS + w OS X wymaga, aby wszystkie nazwy plików były przechowywane w reprezentacji UTF-8 w ich całkowicie rozłożonej formie . W nazwie pliku HFS + „ä” MUSI być zakodowany jako 0x61cc88, a „ö” MUSI być zakodowany jako 0x6fcc88.
Jestem prawie pewien, że dzieje się tutaj to, że kiedy wpiszesz „Näyttökuva.png” w wierszu poleceń, „wpisuje” znaki w złożonej formie. Po utworzeniu pliku system plików rozkłada znaki do przechowywania. Jak dotąd wszystko jest w porządku. Ale kiedy próbujesz użyć uzupełniania tabulatora zaczynającego się od „Nä”, myślę, że bash nie dekomponuje „ä” przed wyszukiwaniem dopasowań i oczywiście go nie znajduje.
Aby zilustrować różnicę, oto przykład tego, jakie kodowanie jest używane, gdy po prostu wpisuję „Näyttökuva.png” w wierszu poleceń, w porównaniu do tego, co jest używane, gdy przechowuję go jako nazwę pliku i używam uzupełniania tabulatorem, aby go wypełnić:
$ 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
Jeśli chodzi o zagubienie się postaci podczas usuwania i ponownego wprowadzania kart, podejrzewam, że jest to ściśle powiązane. W szczególności myślę, że bash „usuwa” jeden punkt kodowy za naciśnięciem klawisza Delete, ale usuwa jeden znak z okna Terminala za naciśnięciem. Ponieważ jeden z usuniętych znaków (tym razem „ö”) składał się z dwóch punktów kodowych, ale tylko jednego znaku, wyświetlacz terminala nie synchronizuje się. Spróbuj uzupełnić tabulatorem całą nazwę pliku, usunąć ją z powrotem do „Näytt”, a następnie ponownie uzupełnij tabulatorem: bash wydaje się myśleć, że usunięto tylko łączącą diaeresis, a nie całe „ö”, więc ponownie dodaje łączącą diaeresis , ale tym razem dołącza się do „t”:
$ echo Näytẗkuva.png
Näyttökuva.png
Zauważ, że kiedy naciskam return, bash faktycznie ma tam całą nazwę pliku; to tylko wyświetlacz terminala był zdezorientowany.
Bash TL; DR zawiera kilka błędów związanych z rozkładanymi znakami akcentowanymi.
EDYCJA: po pewnym zastanowieniu, myślę, że jedynym pełnym rozwiązaniem jest naprawienie bash (/ poczekaj, aż deweloperzy go naprawią). Może też istnieć sposób wprowadzania znaków w rozłożonej formie, ale nie mam pojęcia, co by to było. Ale znalazłem częściowe obejścia:
Przeciąganie i upuszczanie pliku z Findera wkleja w prawidłowej formie. Ponieważ Finder pobiera nazwę pliku z systemu plików, jest on już rozłożony, więc po prostu działa.
Możesz właściwie uzupełnić tabulatorem samą akcentowaną postać. Na przykład, jeśli wpiszesz „Na”, a następnie tabulator, będzie pasować do „Näyttökuva.png”, ponieważ rozkład kanoniczny „ä” zaczyna się od „a”. Ale jeśli masz plik o nazwie „Narwal.gif” w tym samym katalogu, nie będzie to bardzo pomocne ...
Nie testowałem tego, ale jeśli powiążesz tabulację z menu-kompletnym zamiast kompletnego, powinno to umożliwić tabulowanie możliwych dopasowań, abyś mógł wybrać ten, który chcesz, nawet jeśli nie możesz wpisać następnej litery. (Lub możesz powiązać go z innym naciśnięciem klawisza, więc możesz go używać tylko wtedy, gdy jest to konieczne).
Aby rozwiązać problem z brakiem synchronizacji wyświetlacza terminala, możesz powiązać coś z przerysowaniem linii prądu - nie zapobiegnie to wystąpieniu problemu, ale da ci możliwość ponownej synchronizacji wyświetlacza.
$ echo -e "N\xC3\xA4*" | ls
(echo dajeNä*
) wynikówNäyttökuva.png
. Problem istnieje również w przypadku innych powłok w systemie Mac OS; i np. zshls N
zostaje automatycznie uzupełnione dols Na<0308>ytto<0308>kuva.png