SSH経由で接続されたRHELシリーズシステムで私のシェルが正しく機能しないのはなぜですか?

SSH経由で接続されたRHELシリーズシステムで私のシェルが正しく機能しないのはなぜですか?

SSHを介してRHELシリーズホスト(Fedora、CentOS、実際のRHELなど)に接続しても、シェルの動作に関する問題が引き続き発生します。 SSHを介してこのLinuxディストリビューションスイートに接続すると、この問題が発生するようです。これは、選択したときにそのディストリビューションの使用を完全に中止する予定があるほど残念です。

望ましくない動作は、ターミナル行の先頭を認識できないことです。これにより、以前に使用したコマンドを修正することが非常に困難になります。

私は$ TERMがSSHクライアントとホスト上で一致していることを確認するなど、過去にいくつかの診断を確認しました。以下のデモでは、両方とも同じように使用します。

nborgers@Persons-Laptop ~ % echo $TERM
xterm-256color
nborgers@Persons-Laptop util % ssh gateway -t 'bash -ic "echo $TERM"' 
xterm-256color
Connection to 10.212.100.192 closed.

このデモでは、私のクライアントはMacOSですが、WSL(したがってLinux VM)でSSHを実行すると同じ問題が発生します。

デモシェルはMacOS zshで正常に動作しますが、SSH経由でFedoraインスタンスに接続すると機能しません。

検証済みソリューションの適用:Ansibleプレイブックと違って私が間違っている部分は次のとおりです。

nborgers@Persons-Laptop host-config-as-code % git diff --ignore-space-at-eol
diff --git a/ssh/terminal_colors.yaml b/ssh/terminal_colors.yaml
index 6751809..33bb779 100644
--- a/ssh/terminal_colors.yaml
+++ b/ssh/terminal_colors.yaml
@@ -12,6 +12,6 @@
     lineinfile:
       path: /etc/bashrc
       state: present
-      line: 'export PS1="\e[0;{{ color }}m[\u@\h \W]\$ \e[m "'
+      line: 'export PS1="\[\033[01;{{ color }}m\]\u@\h \[\033[0m\]\W $ "'
     when: ansible_os_family == 'RedHat'

明らかに、いくつかのシェーディング構成でこの問題が発生しました。以前にこの問題を実行していないコンピューターでこの問題を見たようですが、もう再現できません。

ベストアンサー1

デモでの動作の一般的な原因は、プロンプト文字列に非印刷文字として適切に指定されていない端末制御文字列が含まれていることです(たとえば、\[... \]inbashまたは%{... %}inに含まれているzshと同様の方法) )。

違いは、自動的に印刷されないと見なされるプロンプトカラーエスケープコードが組み込まれているため、bashzshのシェルにそのようなシェルが必要かどうかわからないことです。

したがって、シェルはプロンプト文字列が占める表示可能な文字単位の数を誤って計算し、カーソルが次の行に折り返す必要があるか、改行されたコマンドラインから戻るときに前の行に戻ると混乱を招く可能性があります。

$PS1OR定義を確認し$PROMPT、そのシェルのマニュアルページに直接文書化されていない印刷されない文字のシーケンスが適切なシェル依存方法で含まれていることを確認する必要があります。

おすすめ記事