ファイル名が「â」記号で囲まれているのはなぜですか?

ファイル名が「â」記号で囲まれているのはなぜですか?

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'

メモ:PuTTYを使用してWindowsシステムからCentOSシステムにSSHを接続しているので、これは確かに文字エンコーディングの問題です。私の仮想マシンでUbuntuゲストを使用すると、すべてが正常です。必要に応じて丸い引用符が表示されます。

答え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

奇妙な文字を追加していませんか? .bashrcで人間が読めない文字を見るには、 ':set list'でviを試してください。

「エイリアス」と入力し、オペレーティングシステムが使用する正しい構文を表すことができるシステムエイリアスがあることを確認してください。それ以外の場合は、主にcentosとredhatを使用してエイリアス構文がすでに正しいように見えます。したがって、これが問題の実際の原因ではない可能性が高いです。

答え3

テキストを正確にカットして貼り付けましたが、一部のクリップボードがテキストを破損していない場合(そして大きな場合です...)

ファイル名の前後に1つの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ファイル名の周りに一重引用符を追加します。 Google で「smart quote c3 a2」と検索すると検索できます。この記事そしてティー彼の記事これは同様の問題を説明しているようです。私の意見では、TERMINAL、LC_ALL(または他のロケール変数)、またはカットペーストが何らかの方法でMicrosoftの「Word」スタイルの「スマート引用符」を取得しているようです。

あなたはこれを行うことができますか?

ls -l > files
hexdump -C files

出力は、hexdump「file1.txt」が実際にディレクトリに存在することを確認し、ディレクトリリストに省略記号を持つラテン語の小文字Aがないことを示します。これはa-irambicが間違っていることを意味しますrm。または、選択した文字セットを説明するための不幸な試みです。

関連情報