10

対話型 bash ですべての stderr ストリームをリダイレクトする方法を探しています (理想的には、呼び出し元の親プロセスに)。

各コマンドに追加することで実行できる、個々のコマンドから stderr ストリームをリダイレクトしたくありません2> a_file

デフォルトでは、これらの stderr ストリームは対話型 bash の stdout にリダイレクトされます。stdout がエラー メッセージによって汚染されるのを防ぎ、それらを個別に処理できるようにするために、このインタラクティブな bash プロセスの stderr にそれらを取得したいと考えています。

何か案は?

私はまだ答えを見つけていません...しかし、おそらくそれは実際にはttyパラメーターです。stderr を処理するための tty/interactive shell の責任について何か知っている人はいますか?

4

7 に答える 7

10

exec組み込みの bashを使用します。

exec 2> /tmp/myfile

于 2008-08-27T13:28:17.687 に答える
4

そのプロセスの stderr をリダイレクトする新しい bash プロセスを起動できます。

  $ bash -i 2> stderr.log
  $ 
于 2008-08-27T13:27:48.217 に答える
2

設計どおりに機能する問題がわかりません:

$ ssh remotehost 'ls nosuchfile; ls /etc/passwd' >/tmp/stdout 2>/tmp/stderr 
$ cat /tmp/stdout  
/etc/passwd 
$ cat /tmp/stderr 
nosuchfile not found
于 2008-09-17T15:23:52.943 に答える
2

次のように、コマンドを二重引用符で囲んでみてください。

ssh remotehost "command" 2>~/stderr

リモートホスト上の存在しないファイルを使用して、ローカルシステムでテストしました。

$ ssh remotehost "tail x;head x" 2>~/stderr
$ cat stderr 
tail: cannot open `x' for reading: No such file or directory
head: cannot open `x' for reading: No such file or directory
于 2008-09-16T18:00:37.473 に答える
2

2つのこと:

  1. リモート ssh コマンドで使用2>&1すると、ローカルの tarfile 内でエラーが発生し、「壊れた」バックアップが発生します。
  2. ssh の反対側でリダイレクトを適用する場合は、リダイレクト コマンドをエスケープすることを忘れないでください。

私の提案はstderr、リモート側でファイルにリダイレクトし、エラーが発生した場合に後でそれを取得することです。

例:

ssh -t remotehost tar -cf - /mnt/backup 2\>backup.err > localbackup.tar
EXITSTATUS=$?
if [ $EXITSTATUS != "0" ] then 
  echo Error occurred!
  ssh remotehost cat backup.err >localbackup.errors
  cat localbackup.errors
  ssh remotehost rm backup.err 
else 
  echo Backup completed successfully!
  ssh remotehost rm backup.err 
fi
于 2010-11-11T17:43:52.723 に答える
0

ssh -tリモートエンドで疑似TTYを作成しようとしましたか?

于 2009-04-08T19:39:07.767 に答える