やや複雑な質問があります。私はWindows 10の1周年アップデートとUbuntu用のBashを使用しています。経由でサーバーに接続していますssh
。このサーバーは、fish shell
矢印を押すとコマンド履歴を表示するか、次のコマンドを推測するのではなく、いくつかのシンボルのみを印刷します。これが私が見るものです:
- arrow up印刷
[A
- arrow down印刷
[B
- arrow right印刷
[C
- arrow left印刷
[D
しかし、矢印はにありますbash
。なぜこれが起こるのか知っていますか?
答え1
私は同じ問題がありましたが、少し異なる設定を使用しました。
- WSL(UbuntuとFishを含む)
- SSH経由でUbuntuとBashを実行しているリモートサーバーに接続する
また、リモートサーバーにフィッシュをインストールして問題を解決しました。
答え2
Windows 10 1周年アップデートとUbuntuのBashデフォルトでは、コンソールウィンドウでbashを実行すると、対応するエスケープシーケンス(矢印キーなどの入力を含む)はMSDNに文書化されています。
それ自体はssh
ほとんど関係ありません(リモートコンピュータと文字を変更せずに送受信)。重要なのは、リモートシステムで使用される端末記述と、フィッシュシェルがエントリを初期化するかどうかです。
あなたが見ているという点で[A
リモートコンピュータでは、これは端末が通常モードのカーソルキー(初期化されていない状態)を送信していることを意味します。これは、設定がハードコーディングされて.inputrc
いるか(ほとんどのファイルを参照)、初期化されていない「linux」端末記述に基づく傾向があるbashと一致します。もちろん、Windows側では、bashが既存の項目と連携するように構成されているため、「動作」します。遠い側では、魚の殻はそこにあるすべてを使用しますTERM
(おそらく「xterm」)。 「xterm」の場合、fishshellは予想します。申請方法^[OA
vsなどのカーソルシーケンス^[[A
を見ると、エラー処理が発生します。
追加資料:
- 特殊キー(xterm マニュアル)
- (すべての)シェルでカーソルキーを使用できないのはなぜですか?(xterm FAQ)
答え3
理由:
接続しようとしているセッションは、bashシェルとは異なる端末エミュレーションを使用します。
簡単な解決策:
SSHセッションでは矢印キーを使用しないでください。
より難しい解決策:
ターゲットサーバーとフィッシュシェルを調べ、それらが使用する端末エミュレーションとそれを変更するオプションを決定します。 Windows用のBashを調べて、Bashが使用する端末エミュレーションとそれを変更するために使用できるオプションを学びます。 2つの間の重なり合う部分を見つけて実装します。
Windowsソリューション:
Windowsでは、Putty(または他のSSHクライアントソフトウェア)を使用してターゲットサーバーに直接接続します。
Windows用の無料のオープンソースソリューション:
使用端末'またはそうです。
ハードコアソリューション:
実行できるbashスクリプトの作成Windows用のリリース必要な端末エミュレーションを自動的に検出し、ケースごとに実装するため、SSH対応デバイスにリモートでアクセスし、常に矢印キーを使用できます。