快速摘要:
在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_US
或en_GB
。如果是这样,请尝试LANG=en_US.utf8
(即在末尾添加.utf8
),然后再次运行bash
(在同一 session 中以递归方式),然后再次进行测试。如果这样可以解决,您将弄清楚如何在(大概是)Debian Linux上使更改永久(通常归结为要编辑的配置文件)。
关于bash - 英镑符号(£)在docker容器内的Bash shell中引起新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42206638/