(私が知る限り)解決すべき問題はありません。私はSSHをよりよく理解しようとしています。
私のシステムでは、sshエスケープ文字はチルダ(〜)です。どこかにSSHを接続すると、期待どおりに使用できます。
me@local$ ssh remote
me@remote$ # here I press tilde, control+z
[1]+ Stopped ssh remote
me@local$
みんな大丈夫です。しかしvim
、リモートで実行すると、vimに突然エスケープ文字が表示されます。エスケープ文字が送信されなくなったようです。到着 ssh
しかし、代わりに渡す ssh
、まるでエスケープ文字ではないようです。
me@local$ ssh remote
me@remote$ vim
# vim opens, here I press tilde, control+z
[1]+ Stopped vim
me@remote$
vim
私の質問は、エスケープ文字の動作にどのような影響を与えるかです。ssh
答え1
コメントから:
チルダとCtrl + Zキーを押す前にReturn / Enterを押すとどうなりますか? - ささやき
これにより、sshがバックグラウンドに配置されます。 Return/Enter の動作が変わるのはなぜですか?これはどこに文書化されていますか? - キル-9
2番目の質問に対する答えは最初の質問よりも簡潔であるため、逆に答えてみましょう。
この(〜の前にエンターを押してください)はどこに記録されていますか?
これOpenssh のマニュアルページのエスケープ文字セクションssh
キーストロークをリモートサーバーに渡すのではなく、クライアントプログラムにタスクを実行させるコマンドエスケープシーケンスについて説明します。 2 番目の段落には次の文が含まれています。
特殊文字として解釈されるには、エスケープ文字は常に改行文字の後に続く必要があります。
これがやや曖昧で見落としやすいと思っても、私はあなたを責めることはありません。以前は状況が悪かった!私が最初にシャットダウン~.
コマンドに遭遇したのは、1990年代のSunOS 4.xコマンドでしたtip
。マニュアルページ説明する:
行の最初の文字として表示されるチルダ文字(〜)は、プロンプトが特別な操作を実行することを示すエスケープ信号です。
この説明により、読者は~
キーについて推論できます。行の最初の文字、前のキーストロークはReturn / Enterでなければなりません。文書から推論するのは良いことではありません。ほとんどの人はポイントを見逃して、tip
彼らの(終了)命令が無視されるように見えるときに~.
イライラを感じます。マニュアルssh
ページでは、説明をより明確に改善しました。
~
これらのエスケープシーケンス(1981年に4.1BSD Unixにさかのぼると思われる)に先行するReturn / Enterが必要な理由は、誤ってセッションが切断されるのをrlogin
防ぐためです(おそらくリモートサーバーにアップロードされたファイルから)。~.
vimのリモートセッションを実行するために追加のReturnキーが必要なように見えるのはなぜですか?
(あなたの質問に対する私の解釈)
vim
他のコマンドを実行するのと比較して、リモートセッション呼び出しに「追加」Returnキー入力が必要な理由を正確に知ることはできません。しかし、私はいくつかの根拠のある推測を提示します。
vim
リモートサーバーで実行していてEnterキーを押すと、入力する前にすでに別のキーストロークが入力されています~Ctrl-Z
。おそらく矢印や、、、、h
カーソルの移動キーを押した可能性があります。またはディスプレイを更新します。j
k
l
Ctrl-L
vim
呼び出しと入力の間にキーが押されていない場合、プログラムは状態を~Ctrl-Z
要求vim
するために端末プログラムに一連の文字を送信し、端末プログラムは応答として文字を再送信できます。これらのクエリと回答は通常、ターミナルプログラムには表示されません。応答の順序はキーストロークと同様にターミナルプログラムから来て、sshクライアントは~
Returnの代わりにその前に来る他の文字を見るでしょう。
第2の推測は第1の推測よりも可能性が低いが、状況によってはこれらの推測が発生した。
最後に...
sshクライアントプログラムにエスケープシーケンス/コマンドを送信する最も信頼性の高い方法は、エスケープ文字を実際に2文字として扱うことです。戻りの後にチルダが続きます。ほとんどのコマンドでは、シーケンスには2回ではなく3回のキーストロークが必要です。