/var/iot/data
リモートでデータをインポートするデバイスがあります。
機械自体から:
# cat /var/iot/data | xxd -ps -c 32
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
これは正確なデータです。
同じタスクをリモートで実行すると正しく表示されます。
$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32'
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
しかし、実際には複数のエスケープシーケンスを介して行われます。
$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' | xxd
00000000: 1b5d 3131 3b23 3138 3464 3666 0738 3064 .]11;#184d6f.80d
00000010: 6530 3034 6130 3330 3237 3030 3535 3637 e004a03027005567
00000020: 3830 3133 6163 3539 3165 3563 3661 6261 8013ac591e5c6aba
00000030: 6332 3138 3566 3433 3139 6338 3038 3865 c2185f4319c8088e
00000040: 330a 1b5d 3131 3b23 3139 3139 3730 07 3..]11;#191970.
.]11;#184d6f.
そもそもこれは何だったの?
答え1
順序は
OSC 1 1 ; # 1 8 4 d 6 f BEL
OSC 1 1 ; # 1 9 1 9 7 0 BEL
これはxterm制御シーケンス端末テキストの背景色の設定を要求します。コマンドの出力をシェルプロンプトと区別するためにこれらのファイルが出力されるように、誤って作成されたシェル初期化ファイルが原因で発生する可能性がありますが、これは無条件に行われます。
答え2
あなたはおそらくbashの奇妙な動作に閉じ込められているでしょう。初期化ファイル。 Bashは.bashrc
まったく異なる2つの状況でロードされます。
- もしあれば対話型非ログインシェル。
- で作られた場合
sshd
。
したがって、SSHを介してログインしたときに.bash_profile
シェルが対話型の場合、bashは.bashrc
そうでない場合にロードされます。-T
に渡してもこれに影響を与えず、実際にあなたの場合にはほとんど影響しません。コマンドを渡すか、またはに渡さないと、SSHが端末をssh
生成するためです。-t
ssh
あなたのコード.bashrc
には、いくつかのエスケープシーケンスを発行して端末と対話するいくつかのコードが明確に含まれています(具体的には背景色の設定)。これらの混乱を避けるために何も実行しないでください。.bashrc
混乱を避けるために、bashがインタラクティブに実行されない場合、これを一番上に置く.bashrc
:
if [[ $- != *i* ]]; then return; fi
答え3
ssh
どの端末がリモートであるかを常に知るために、sshの前に端末の背景を設定する関数があります。みんなの時間を無駄にしてすみません。
答え4
-T
オプションを使用すると、ssh
リモートSSHサーバーは仮想端末をセッションに割り当てるため、プログラム(シェルなど)はそれに応じて機能します。
任意のデータを転送するには、この-T
オプションを無視してください。