为什么文件名要用“â”符号括起来?

为什么文件名要用“â”符号括起来?

添加alias rm='rm -i'到我的~/.bashrc文件后(因为当我删除文件时,它不会要求确认),文件名会用“â”符号括起来,如下例所示:

rm: cannot remove âfile1.txtâ: No such file or directory

别名列表:

alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

笔记:我从 Windows 机器上使用 PuTTY ssh 到我的 CentOS 机器,所以这绝对是字符编码问题。在我的虚拟机中使用 Ubuntu guest,一切都很好。智能报价会根据需要显示。

答案1

这些â是 UTF-8 引号,您当前的终端无法正确显示,在 ISO-8859-1 或类似配置中进行配置。

您可以通过设置匹配的语言环境或 POSIX 语言来获得正确的显示:

$ rm file.txt
rm: cannot remove â  file.txtâ : No such file or directory
$ LC_ALL=en_US.UTF-8 rm file.txt
rm: cannot remove â  file.txtâ : No such file or directory
$ LC_ALL=C rm file.txt
rm: cannot remove 'file.txt' : No such file or directory

$ rm foo 2>&1 | od -c
0000000   r   m   :       c   a   n   n   o   t       r   e   m   o   v
0000020   e     342 200 230   f   o   o 342 200 231   :       N   o    
0000040   s   u   c   h       f   i   l   e       o   r       d   i   r
0000060   e   c   t   o   r   y  \n
0000067
$ LC_ALL=C rm foo 2>&1 | od -c
0000000   r   m   :       c   a   n   n   o   t       r   e   m   o   v
0000020   e       '   f   o   o   '   :       N   o       s   u   c   h
0000040       f   i   l   e       o   r       d   i   r   e   c   t   o
0000060   r   y  \n
0000063

答案2

你确定你没有添加一些奇怪的角色吗?尝试使用 vi 和 ':set list' 来查看 .bashrc 中的非人类可读字符。

仅键入“别名”并查看是否存在任何系统别名,它们可能指示您的操作系统使用的正确语法。否则,主要使用 centos 和 redhat,你的别名语法对我来说看起来已经正确了。因此,它似乎不太可能是问题的实际原因。

答案3

如果(这是一个很大的如果)你准确地剪切粘贴了文本,并且某些剪贴板没有损坏它......

其中有一个 UTF-8 字符,2 个字节,C3 A2,即:U+00E2, â, c3 a2, 带有省略号的拉丁文小写字母 A,在文件名之前和之后。

当我发出命令时:

alias rm='rm -i'
rm spdkdkdkdlsls

我从 4.3.39 得到这个bash

rm: cannot remove 'spdkdkdkdlsls': No such file or directory

我有LC_ALL=en_US.UTF_8唯一的区域设置环境变量。但需要注意的是,rm在文件名两边加上单引号。如果你用谷歌搜索“智能引号 c3 a2”,你会发现本文和T他的文章这似乎可以解释类似的问题。我的猜测是,您的 TERMINAL、LC_ALL (或其他区域设置变量)或剪切粘贴正在以某种方式在其中获取 Microsoft“Word”样式的“智能引号”。

你能做这个吗:

ls -l > files
hexdump -C files

输出hexdump将让您查看目录中是否确实存在“file1.txt”,并显示目录列表中没有带有省略号的拉丁文小写字母 A。这意味着a-抑扬音是 的错误rm。或者不幸的是尝试解释您选择的字符集。

相关内容