快速摘要:

在Bash shell 中使用英镑(£)符号时遇到一些麻烦。

当我按£键时,会得到一个新行,而不是£符号。为了确切地理解我的意思,我做了一个屏幕录像,可以在这里查看:

https://drive.google.com/open?id=0B-kN4kPOjEdDUENDbjJ3ekJRQ3M

在屏幕录像中,我尝试键入以下行:

export P='Secure$%£Password'
echo 'I will now type a GBP pound symbol: £'
I will now press the pound symbol 3 times £££
echo 'What is going on?'

每次按£键,都会开始新的一行,并且不会打印任何£符号。

详细信息:

这是一个基于该MySQL Dockerfile在Docker容器中运行的bash shell:
https://github.com/docker-library/mysql/blob/eeb0c33dfcad3db46a0dfb24c352d2a1601c7667/5.7/Dockerfile

Docker主机是运行Docker版本1.13.1,内部版本092cba3的Ubuntu 16.04 Azure VM。

在Mac OSX上运行的本地Bash Shell上不会发生此问题

如果在运行Docker的本地Mac OSX上运行基于上述Dockerfile的容器,则会发生问题。


docker run -it --name=test mysql:latest /bin/bash

我已经尝试对Docker和/或Bash实例进行了谷歌搜索,这些实例具有由£符号引起的新行,但无济于事。

在我的研究中,£符号似乎不是特殊字符。

任何人都可以阐明可能导致这种情况的原因吗?

注释中以下问题的其他详细信息:

我将英国键盘插入Apple Mac;但是,当我从Android手机将SSH SSH到目标服务器时,也会遇到相同的问题。

我使用Shift-3产生£符号。

复制后粘贴£符号会得到相同的行为。

当我按Ctrl-V组合键时,会将^ V字符打印到控制台。

按Alt-#似乎不会产生任何结果

当我启动命令cat -v,然后键入£符号,后跟返回键时,我得到以下shell输出:
root@090bee3ba719:/# cat -v
£
M-BM-#

最佳答案

看起来您的键盘输入是以UTF-8格式输入的(其中£被编码为两个字节,C2 A3),但是您的shell期望使用Latin-1或类似的东西。

特别是,第二个字节(A3)等于163 = 128 +35。#的ASCII码为35,移位128被解释为“元”。因此,bash将A3视为M-#,默认情况下绑定(bind)到insert-comment命令。此命令在行的开头插入#,然后就像输入换行符一样工作(您可以在演示视频中看到两种效果)。

解决此问题就像更改某些区域设置变量一样容易。尝试echo $LANG。这是您的默认语言环境。典型的输出类似于en_USen_GB。如果是这样,请尝试LANG=en_US.utf8(即在末尾添加.utf8),然后再次运行bash(在同一 session 中以递归方式),然后再次进行测试。如果这样可以解决,您将弄清楚如何在(大概是)Debian Linux上使更改永久(通常归结为要编辑的配置文件)。

关于bash - 英镑符号(£)在docker容器内的Bash shell中引起新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42206638/

10-15 23:02