予期しない文字は、(端末エミュレータに関する)テキスト出力をフォーマットするために使用されるエスケープシーケンスです。 (詳細はWikipedia: terminal emulatorを参照してください)
具体的には、プロンプトの出力は特定のbash変数、つまりPS1, PS2, PS3, PS4を使用して設定できます。 How to change bash prompt color based on exit code of last command?には、それらを修正する効果が表示されています。
あなたのケースでは、bash
の呼び出しは、エスケープシーケンスを使わずに簡単に再定義する特別なスクリプトを用意する必要があります。したがって、望ましくない書式を取り除くことができます。これは助けてくれるかもしれません:SO: Running a custom profile file on remote hostしかしこれはまた有望に思われる:Is it possible to start a bash shell with a profile at a custom location, in a one liner command?。
これを書いて、特定のコマンド(例:ls
)が色付き出力もサポートしていることを思い出しました。私がわからなかったので、私はこれを試してみました:
$ mkdir test ; cd test ; touch test1 ; ln -s test1 test2 ; mkdir test3 ; touch test4 ; chmod a+x test4
$ ls --color
test1 test2 test3 test4
$
私はここで、色でそれをフォーマットする方法を知りませんが、私のxterm上で、それはマルディグラのように見ています。あなたが見ることができるように
$ ls --color | hexdump -c
0000000 t e s t 1 \n 033 [ 0 m 033 [ 0 1 ; 3
0000010 6 m t e s t 2 033 [ 0 m \n 033 [ 0 1
0000020 ; 3 4 m t e s t 3 033 [ 0 m \n 033 [
0000030 0 1 ; 3 2 m t e s t 4 033 [ 0 m \n
0000040
:ls
は、端末エスケープシーケンスを使用しないこのように、私は効果を示すためhexdump
を使用しています。その後、変数TERM
を思い出しました。このリンクThe TERM variableには、おそらくゲームの一部であるterminfo
またはtermcap
も含まれています。
したがって、PS1
... PS4
の再定義に加えて、また、TERM
を再定義するために有用である可能性:
$ TERM=
$ ls --color | hexdump -c
0000000 t e s t 1 \n t e s t 2 \n t e s t
0000010 3 \n t e s t 4 \n
0000018
$
ところで。私はbashプロンプトがまだ色づけされていることを認識しました。これは2回考えられます。PS1
... PS4
のエスケープシーケンスは「ハードコードされている」つまりTERM
という設定は考慮されません。
更新:
これをテストするために、私はサンプルスクリプトmybashrc
書きました:
PS1="> "
PS2=">>"
PS3=
PS4="++ "
TERM=
をし、Windows 10(64ビット)上でcygwinの中のbashでそれをテストした:
$ bash --init-file mybashrc -i
> echo "$PS1 $PS2 $PS3 $PS4"
> >> ++
> exit
exit
$
Btw。私は[バックスペース]キーがサンプルセッションで何らかの形で異常に機能していることに気付きました。それでも意図した効果はありますが、出力が間違っています。出力ではなく、内部バッファはこれを正しく処理するようだが、最後の文字を削除する
です:
$ bash --init-file mybashrc -i
> echo "Ha ello"
Hello
> echo "Ha ello" | hexdump -c
0000000 H e l l o \n
0000006
> exit
exit
$
(どちらの場合も、私はecho "Ha
後、[Backspace]キーを一度入力しました。)理由はおそらく不足している端末エミュレーションです。
このように、(アプリケーションの)コンソールがbashの出力チャネルのバックスペースを適切に処理すると、混乱を避けることができます。
'bash.exe'プログラムがエスケープシーケンスとカラーコードを完全に追加しないようにするためのコマンドや引数やパラメータはありますか? – newpeople
私は '-i'と' --login'(そして他のもの)の引数の効果に関する 'man bash'という方針を読んだところです。なぜなら、あなたの問題にも関連していると思っていたからです。私が正しく理解していれば、これらの引数は主に、bashの起動時と終了時に実行されるスクリプトを定義します。これにより、実際にはカラーサポートが組み込まれていないと私は信じられます。すべてのフォーマットは設定によって行われます。したがって、上記のヒントは十分であるはずです。 – Scheff
このように、解決策はおそらく(追加引数) '--init-file'または' --rcfile'と、前述の変数 'PS1' ...' PS4'と ' TERM'。 – Scheff