1

これは私を悩ませてきた問題であり、解決策を見つけることができません。私のプログラム:

#!/usr/bin/sh
ssh -t myuser@anotherhost "cat ~/severalLineFile"

とのよう~/severalLineFileanotherhost見えます:

line1
line2
line3
line4
line5
line6

プログラムを単独で実行すると、端末への出力は期待どおりに見えます。ただし、ターミナルのサイズを5行だけになるように変更し、プログラムをそれ以下にパイプすると、次のようになります。

line1
     line2
          line3
               line4
                    :

その時点でスペースバーを押すと、次のように印刷されますline5line6および追加の行)。

line5
line6

これは、疑似端末でsshを実行した結果であり、改行が改行に含まれているためにこの階段状のステップが発生することを理解しました。私は使ってみましstty ocrnlたが、これは私が望むことをしません。つまり、スペースバーを押した後、lessの最初の印刷がすべてのように動作するためです。

ところで、すべてのキーボード割り込みがリモートプロセスに到達するようにしたいので、モードsshで実行する必要があります。物事のこちら側に解決策があれば、私はすべての耳です。私はLinuxServer6.1を使用しており、端末はMacOS10.6.8を使用しています。-tctrl+C

\r\nまた、疑似端末が生成するをに置き換えようとしました\nが、これでは問題は解決しません。

4

2 に答える 2

5

余分なキャリッジリターン文字を削除するには、使用する必要stty -onlcrはありませんstty onlcr各印刷行の余分なキャリッジリターンを参照)。

ssh最初にコマンドの出力をにパイプしcat -v、次ににパイプするとどうなりlessますか?

ssh -t localhost "stty -echo -onlcr; cat testfile.txt; stty echo onlcr" | cat -v | less -U

ctrl+Cキーボード割り込みをリモートプロセスに伝播させたい場合は、名前付きパイプを介して「EOFからSIGHUP」コンバーターを試すことができます(参照: sshが終了した後、他のシステムでsshコマンドが予期せず続行されます;リモートシェル全体を強制終了するには:kill -HUP -- -$$)。

于 2014-02-13T16:04:59.317 に答える
0

あなたの問題はEOLマーカーです。MacOSはCR(\r別名\x0d)文字を使用し、LinuxはLF(\n別名\x0a)を使用します。CRのような端末描画文字をサポートしているため、sshは、EOLマーカーではなく、画面上でカーソルを移動する文字として解釈します。これを試して:

ssh -t myuser@anotherhost "sed -e 's,\\r,\\n,' ~/severalLineFile"

また

ssh -t myuser@anotherhost "tr '\\r' '\\n' < ~/severalLineFile"

それが機能しない場合はscp、ファイルをターミナルにコピーするために使用できます。

scp myuser@anotherhost:severalLineFile /dev/stdout
于 2012-05-07T15:01:59.093 に答える