So beheben Sie die Zeichenkodierung in Bash (Arch Linux)

8

Ich habe einige Probleme mit der Kodierung deutscher Umlaute in Bash. Es funktioniert meistens gut, aber wenn ich einen ungültigen Befehl eingebe, enthält die von bash generierte Fehlermeldung seltsame Escape-Sequenzen und nicht die tatsächlichen Zeichen.

Hier ist ein Protokoll, das das Problem zeigt:

[root@myhost ~]# mkdir ä
[root@myhost ~]# ä
-bash: $'\303\244': Kommando nicht gefunden.
[root@myhost ~]# ü
-bash: $'\303\274': Kommando nicht gefunden.
[root@myhost ~]# ls
ä  äöü  Projects  tbb
[root@myhost ~]# cat äöü
äüö
[root@myhost ~]# rm ä
rm: Entfernen von „ä“ nicht möglich: Ist ein Verzeichnis
[root@myhost ~]# rmdir ä
[root@myhost ~]# rm äöü

die Konfiguration meiner /etc/rc.conf:

LOCALE="de_DE.UTF-8"
DAEMON_LOCALE="no"
HARDWARECLOCK="localtime"
TIMEZONE="Europe/Berlin"
KEYMAP="de-latin1"
CONSOLEFONT=
CONSOLEMAP=
USECOLOR="yes"

/etc/locale.gen enthält nur die Gebietsschemas de_DE:

de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15

locale Ausgabe:

LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Smerlin
quelle
Welchen Terminalemulator verwenden Sie?
Roman B.
@RomanB: Kitt, aber das Problem ist das gleiche, wenn die Raw-Shell lokal verwendet wird. Dies ist also ein Bash-Problem.
Smerlin
@smerlin, es gibt keine "rohe Shell", meinst du die Konsole, das Gnome-Terminal, urxvt, xterm oder eine andere? Was passiert, wenn Sie die Konsole verwenden, wenn Sie versuchen, "TERM = Linux exportieren"?
Alexander
@ Alexander Das gleiche:$ ö bash: $'\303\266': command not found
Roman B.

Antworten:

1

Dies scheint mit Bash 4.2 eingeführt zu werden. Sie können dies den Bash-Entwicklern als Fehler melden.

Alexander
quelle
Genau. Das Unicode-Zeichen wird in seine Komponentenbytes aufgeteilt, sodass die Unicode-Behandlung deaktiviert ist.
Jpaugh