web-dev-qa-db-ja.com

Macターミナルでローカルにリモート出力をキャプチャする

Macターミナルのssh出力にローカルプログラムでアクセスしたい。

まず、各コマンドの出力をファイルにリダイレクトしてみました。ファイルは完璧でしたが、もちろんリモートサーバー上にあり、各コマンド出力のsftpは少し...重いように見えました。

次に、Applescript Terminalを試しましたが、タブに現在表示されているテキストにしかアクセスできません(つまり、出力の半分がすでにスクロールして見えなくなっている場合、返されません-役に立たない)。

最後に、sshをteeにパイプしてみました(例:ssh user @ Host | tee output.txt)。これはほとんど機能しました。ローカルファイルに出力がありますが、不要な文字がたくさん混ざっています。たとえば、バックスペースを押すたびに、ファイルに^ Hがあります。 「[0m [K」のように取り除くのが難しいテキストもあります。

このssh出力をローカルできれいに取得するにはどうすればよいですか?

6
Sean DeNigris

script を使用して、ターミナルセッションのTypeScriptを作成します。

次に、sedを使用してサニタイズします。

例えば;

% script mysession

% ssh user@Host

[some stuff]

% exit
Script done, output file is mysession

% sed -e '
s/'`echo "\033"`'\[[[:digit:]]*\(;[[:digit:]]*\)*[[:alpha:]]//g; # ANSI Escape sequences (perhaps over-generalised)
s/[^[:print:]]//g; # Non-printable
' mysession > mysession.txt

これで、 ANSIエスケープコード およびその他の印刷できない文字なしでmysession.txtを読み取ることができるはずです。

これは、前の文字を削除するように拡張できます。 ^Het cetera、しかしあなたはそれを望まないと指定しました。

3
Johnsyweb

出力をクリーンアップするための非常に基本的な解決策は次のとおりです。

sed 's/[\000-\037]^M/ /g' output.txt

ただし、それをファイルに戻す方法はわかりません。たとえば、ファイルが与えられた

[~] # ls /
[1;34mbin[0m/         [1;36mhome[0m@        [1;34mlost+found[0m/  [1;36mphp.ini[0m@     [1;34msbin[0m/        [1;34msys[0m/         [1;34mvar[0m/
[1;34mdev[0m/         [1;34mlib[0m/         [1;34mmnt[0m/         [1;34mproc[0m/        [1;34mshare[0m/       [1;34mtmp[0m/
[1;34metc[0m/         [1;36mlinuxrc[0m@     [1;34mopt[0m/         [1;34mroot[0m/        [0;0mstunnel.pid[0m  [1;36musr[0m@

これにより、次のように出力されます。

[~] # ls /
bin/         home@        lost+found/  php.ini@     sbin/        sys/         var/
dev/         lib/         mnt/         proc/        share/       tmp/
etc/         linuxrc@     opt/         root/        stunnel.pid  usr@

scriptを使用してセッションをログに記録することもできます。したがって、SSHセッションに入るときは常に、最初に次のように入力します。

script output.txt

これにより、新しいシェルが開き、出力などをリダイレクトすることなく、すべてのアクションがログに記録されます。終了したら、シェルをexitするだけです。削除SSHサーバーにscriptがない場合は、OS Xから実行できますが、SSH出力が再び文字化けします。

1
slhck