web-dev-qa-db-ja.com

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

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を使用してCentOSマシンにSSH接続しているので、これは間違いなく文字エンコードです。問題。 VMでUbuntuゲストを使用すると、すべて問題ありません。スマートクォートは必要に応じて表示されています。

2
Alan Kis

これらのâsは、現在の端末が正しく表示できない、ISO-8859-1などで構成されているUTF-8引用符です。

一致するロケールまたは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
6
jlliagre

奇妙なキャラクターを追加しなかったのですか? 「:setlist」でviを使用して、.bashrc内の人間が読めない文字を確認してください。

'aliases'と入力して、システムエイリアスが存在するかどうかを確認します。これらは、OSが使用する正しい構文を示している可能性があります。それ以外の場合、主にcentosとredhatを使用すると、エイリアス構文はすでに正しいように見えます。したがって、問題の実際の原因である可能性は低いようです。

0
Baazigar

もしあなたがテキストを正確にカットアンドペーストし、そしていくつかのクリップボードがそれを壊さなかったなら(そしてそれは大きいなら)...

ファイル名の前後に、UTF-8文字、2バイト、C3 A2があります。これは、U + 00E2、â、c3 a2、ラテン小文字A、曲折アクセント記号付きです。

コマンドを発行すると:

alias rm='rm -i'
rm spdkdkdkdlsls

これはbash 4.3.39から取得します:

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

私が持っています LC_ALL=en_US.UTF_8私の唯一のロケール環境変数として。ただし、rmはファイル名を一重引用符で囲んでいることに注意してください。 「smartquotesc3 a2」をグーグルで検索すると、同様の問題を説明しているように見える この記事 とt 彼の記事 が見つかります。私の推測では、TERMINAL、LC_ALL(または他のロケール変数)またはカットアンドペーストは、何らかの形でMicrosoftの「Word」スタイルの「スマートクォート」を取得していると思います。

あなたはこれができますか:

ls -l > files
hexdump -C files

hexdump出力では、ディレクトリに実際に「file1.txt」があるかどうかを確認し、ディレクトリリストにラテン小文字A WITHCIRCUMFLEXがないことを示します。つまり、a-circumflexはrmのせいです。または、選択した文字セットを説明しようとするのは残念なことです。

0
Bruce Ediger