
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を実行すると同じ問題が発生します。
検証済みソリューションの適用: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
と同様の方法) )。
違いは、自動的に印刷されないと見なされるプロンプトカラーエスケープコードが組み込まれているため、bash
他zsh
のシェルにそのようなシェルが必要かどうかわからないことです。
したがって、シェルはプロンプト文字列が占める表示可能な文字単位の数を誤って計算し、カーソルが次の行に折り返す必要があるか、改行されたコマンドラインから戻るときに前の行に戻ると混乱を招く可能性があります。
$PS1
OR定義を確認し$PROMPT
、そのシェルのマニュアルページに直接文書化されていない印刷されない文字のシーケンスが適切なシェル依存方法で含まれていることを確認する必要があります。