0

ssh経由でコマンドを実行するコードがあります。コマンドは次のようになります。

( cd /home/some/path && ./program ) || echo 'error'

これのおかげで、実行が失敗した場合、標準出力に「エラー」が表示され、初期コードの失敗として解釈できます。ただし、このアプローチでは、エラー出力が失われます (ssh 接続を介してプログラムを呼び出すため)。エラー出力をいくつかのエラーログファイルに保存できるようにしたいと思います(awkを使用して日付と時刻で注釈を付けることができれば完璧です)、呼び出し時に出力で「エラー」を取得できるようにしたいと思います失敗した。

私は次のようなものを思いつきました:

( cd /home/some/path && ./program 2>&1 | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }' > error.log) || echo 'error'

エラー出力は error.log ファイルに保存されますが、「エラー」メッセージは表示されません。

これを解決する方法はありますか?

4

2 に答える 2

0

リモートの stderr をローカルにリダイレクトできませんか?

ssh remotehost '( cd /home/some/path && ./program ) || echo error' 2>errors.txt

リモートの stderr をローカルの errors.txt に送信し、リモートの文字列 'error' をローカルの stdout に送信します。

于 2013-02-27T15:32:14.020 に答える
0

出力をファイルにリダイレクトし、同時に画面に出力する「tee」コマンドを使用することもできます。

マニュアルまたはこの記事をご覧ください

例:

$ ls -al 2>&1 | tee output.txt

上記のコマンドは、ディレクトリ リストを画面と output.txt ファイルに出力します。

于 2013-02-27T14:44:16.827 に答える