私はローカルコンピュータでコマンドを実行し、SSHを介してstderrをリモートコンピュータに送信しようとしています。私はできません。
ssh remote machine "command 2>stderr.log"
リモートコンピュータがコマンドを実行できるように正しく構築されていないため、ローカルコンピュータでコマンドを実行する必要があります。まだ試していませんが、基本的に私たちはできないと確信していますか2>ssh local machine /dir/stderr.log
?
答え1
私が理解しているように、コマンドを実行したいと思います。地元のただし、stderr出力はリモートログファイルに保存されます。
努力するプロセスの交換:
local_command 2> >(ssh somemachine 'cat >logfile')
>(...)
これはプロセスの交換。括弧内のコマンドに基づいてファイルに似たオブジェクトを作成します。したがって、2>
stderrはファイルオブジェクトにリダイレクトされ、出力をリモートシステムに保存します。
または、単に既存のリダイレクトを使用してください。
{ local_command 2>&1 1>&3 | ssh somemachine 'cat >logfile'; } 3>&1
stderrはstdoutにリダイレクトされ、sshにパイプすることができます。 stdoutがsshに移動しないように、ファイルハンドル3にリダイレクトします。コマンドが終了すると、ファイルハンドル3がstdoutにリダイレクトされ、端末に表示されます。
答え2
プロセスの実行中にプロセスのstderrトレースに興味がない場合は、一時ローカルファイルを使用できます。
#!/bin/bash
tmpfile=`mktemp`
trap '/bin/rm -f $tmpfile ; exit' 0 1 2 3 15
run_command 2> $tmpfile
if [ -s $tmpfile ]
then
scp $tmpfile remoteserver:logfile
fi
exit 0
「ライブ」データが必要な場合はバッファリングの問題があります。 SSHを介してstderrを送信することはラインバッファリングされない可能性があるため、概念全体が最善のアプローチではない可能性があります。