web-dev-qa-db-ja.com

BASH:�ls:誤って「ñ」と入力したときにコマンドが見つかりません

誤って「ñ」と入力し(任意のコマンドを入力することを期待)、それを削除して正しい文字を入力すると、出力は特殊文字が付加されたコマンドを返します、明らかにシェルはコマンドを認識しないので、「ñ」文字を再度入力しないように注意して再入力する必要があります。

例えば.

Wrong typing       @tachomi:~$ ñs
Correct typing     @tachomi:~$ ls
Output             �ls: command not found
  • 間違ったキャラクターを削除したのに、なぜこれが起こるのですか?
  • どうすればこれを解決できますか?

私が思うに、この種のキャラクターはñ , 'などはシェルと互換性がありません。これが「メモリ」が認識できないものを保持する理由ですが、なぜこれが発生するのかを確認したいと思います。

bashシェルを使用しています

3
tachomi

すべての助けのおかげで、私はこれを修正する方法を見つけることができました。

主な問題はUTF-8エンコーディングによるもので、コメントに記載されているようにサーバーで構成されていませんでした。

コメントの引用:

[@Rmano]:UTF-8では、ñ2バイト char

[@jimmij]:何らかの理由でバックスペース文字を削除すると、そのうちの1つだけが削除されます

[@aecolley]:環境変数LANGC.UTF-8に設定してみてください

これは次のように修正されます。

Find your current LANG    $ locale -v | grep 'LANG='
Output                    LANG=en_US
Change                    $ Sudo LANG=en_US.UTF-8
or
Change                    $ Sudo vim /etc/default/locale
Edit                      ~LANG="en_US.UTF-8"

ターミナルセッションを再開します。

2
tachomi

マルチバイトエンコーディング(おそらくUTF-8)を理解する端末(または端末エミュレーター)がありますが、理解しないシェルがあります。環境変数LANGC.UTF-8に設定してみてください。または、locale -aを実行して、試す可能性のある別の値を見つけます。

7
aecolley

次のコード行を実行できます。

if [[$(locale -v | grep 'LANG=') != *.UTF-8]]; then Sudo $(locale -v | grep 'LANG=').UTF-8; fi

文字コードがまだUTF-8でない場合は、文字コードを現在の文字コードのUTF-8バージョンに設定します。このようにして、シェルはUTF-8文字を理解し、それらを適切にバックスペースします。

0
wizzwizz4