LS 使用時にファイル名の前に予期しない文字が付く

LS 使用時にファイル名の前に予期しない文字が付く

私たちは、YunDiskExpander スケッチを介して extroot をセットアップした Arduino Yun Rev 2 を、extroot 用に 512 MB にパーティション分割された 32 GB の SanDisk microSD に持っています。

しかし奇妙なことに、 ls を使用するたびに、結果の前に 1[桁の数字 (通常は1)、;さらに 2 桁の数字 (通常は34)、文字がm付き、その後にファイル名またはフォルダ名が取得され、常にその文字が[m末尾に追加されます。これは、vim が Arduino で実行されるときにも、すべての文字で発生するようです。

私たちは、ターミナル スケッチとして公開されているシリアル モニターを介してこれにアクセスしています。これらの予期しない文字は開発を著しく妨げているため、ご協力いただければ幸いです。

答え1

あなたが説明したものは(一部)ですエスケープシーケンステキストの前景色を変更する役割を担います。私の Debian では、ls次の出力例が生成される場合があります。

^[[01;34mfoobar^[[0m

ここで、^[は単一の文字、エスケープ文字 ( 0x1b) を表します。これをサポートする端末は、このようなデータを受信した後、青色で印刷しますfoobar。ゼロについては言及していませんでしたが、私のテストではそれが^[[1;34mfoobar^[[m同様に機能することが示されているため、おそらくls後者の形式を生成します。

ls出力をカラー化しようとしますが、エスケープ文字が何らかの理由で送信中に失われたか、正しく送信されても​​端末がそれを無視します (エスケープ文字の表現を印刷せず、後続の制御シーケンスも認識しません)。実際には次のようになります。

[1;34mfoobar[m

オプションのない純粋なものlsは色を使用しないでください。POSIXは色については何も述べていません。それでも、実装によっては出力を色付けするオプションが用意されている場合があり、 が のlsエイリアスになることはよくls --color=autoあります。通常、これはうまく機能し、ユーザーはエイリアスが関係していることに気付かないかもしれません。このシナリオがあなたのケースに当てはまるかどうか確認してください: を呼び出しますalias ls。当てはまると思います。

可能な解決策:

  • 必要に応じてオプションを上書きします: ls --color=no;
  • 必要に応じてエイリアスをバイパスします: command ls;
  • エイリアスを破棄します (シェル セッションごとに 1 回): unalias ls;
  • どの起動スクリプトでエイリアスが定義されているかを確認し、関連する行を削除するかコメントアウトします。これが永続的な解決策です。

関連情報