Как последовательно выполнять команды, эмулирующие пользователя на терминале с помощью сценария оболочки

Diría que lo más probable es que su terminal esté mal configurado y envíe y muestre caracteres en algún conjunto de caracteres de un solo byte -, probablemente ISO8859 -1 o ISO8859 -15 dados los caracteres de muestra que muestra en lugar de los de la configuración regional juego de caracteres.

Por lo general, no hay ningún carácter ø, å, æen la configuración regional C y la codificación ISO8859 -1 (5 )de esos caracteres (0xf8, 0xe5, 0xe6 )no forman caracteres válidos en UTF -8. Los editores de línea como readline o zle necesitan decodificarlos en caracteres, ya que necesitan saber cuántos bytes componen una columna de visualización para poder posicionar el cursor correctamente.

Además, en la configuración regional C que en la mayoría de los sistemas usa ASCII, dado que no hay caracteres en ASCII con el bit 8 establecido, ese bit 8 se entendería por bashcomo significado Meta . 0xF8 se entendería como Meta+x(0x78 (x )| 0x80 ),porque eso es lo que envían algunos terminales Alt+x o Meta+x .

Mientras que M -x no está vinculado a nada por defecto en bash, ßse entendería como M -_e insertaría la última palabra. Puedes apagar eso con:

bind 'set convert-meta off'

Shells como cshson ​​demasiado antiguos como para darse cuenta de que los caracteres pueden estar hechos de varios bytes o ocupar cualquier cosa menos el ancho de una sola columna, por lo que no molestan.

Para verificar esa teoría, ejecute:

od -An -vtx1

E ingrese esos caracteres seguidos de ^D^Dy vea qué codificación ve. Si ve 0xf8 para ø, eso significa que tengo razón. Si ve 0xc3 0xb8 en su lugar, que es la codificación UTF -8 de ø, eso significa que estoy equivocado.

O cambie la configuración regional ada_DK.iso88591(compruebe en locale -ael nombre exacto de la configuración regional en su sistema )y vea si eso funciona mejor.

Ahora, en cuanto a por qué su terminal puede enviar la codificación incorrecta para esos caracteres, tal vez se inició en una configuración regional donde el conjunto de caracteres era iso8859 -1. Tal vez está configurado para ignorar la configuración regional y usar un conjunto de caracteres específico (busque juego de caracteres o codificación en su configuración ). O tal vez haya ingresado sshdesde otro sistema en el que la configuración regional usaba ISO8859 -1 (5 )como conjunto de caracteres.

Puedo reproducir ese comportamiento si desde una terminal UTF -8, ejecuto:

LC_ALL=en_GB.iso885915 luit

Y desde luitcambie la configuración regional a Co una UTF -8 e ingrese caracteres que no sean -ASCII.

1
06.04.2017, 10:22
0 ответов

Теги

Похожие вопросы