0

私のbashスクリプトでは、次のコマンドを使用して別のターミナルウィンドウでプロセスを実行しようとしています。

xterm -e /home/mohit/a.out

tee次に、次のようにコマンドを使用して出力をリダイレクトします。

xterm -e /home/mohit/a.out 2>&1 | tee logfile

しかし、私は何も得ていませんlogfile。手がかりはありますか、なぜこれが起こっているのですか?

4

2 に答える 2

4

xterm が新しいウィンドウを生成し、そのウィンドウで -e を実行するように見えます。そのコマンドが完了すると、終了します。

新しいシェルで開かれているため、そのウィンドウには stderr stdout などが添付されています。

そのウィンドウを開き、ログ ファイルを開いたままにしておくことが必要な場合は、xterm で実行する必要があるすべてを引用する必要があります。そうしないと、bash がリダイレクトを解釈し、それ自体をパイプします。例えば

xterm -e /home/mohit/a.out 2>&1 | tee logfile

bash によって次のように変換されます。

xterm を使用してコマンド /home/mohit/a.out を実行し、stderr を stdout にリダイレクトして、tee にパイプします。

xterm が新しい stdout などで新しいウィンドウを生成すると、ティーは入力を取得しないため、ログファイルには何もありません

試す

xterm -e '/home/mohit/a.out 2>&1 | tee logfile'

これにより、xterm がパイプ処理全体を強制的に実行します。

于 2013-01-17T14:02:12.290 に答える
1

@peteches は、コマンド ライン全体を に指定して出力をキャプチャする方法を既に示しました-e

xtermすべての出力をログファイルにキャプチャするように依頼することもできます-l

xterm -l -e /home/mohit/a.out

XtermLog.XXXXXXまたはという名前のファイルにログを記録しますXterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX

でログファイルを指定できます-lf

xterm -l -lf logfile -e /home/mohit/a.out

欠点は、これは既存のファイルでは機能しないことです。logfilexterm が使用する前に、を削除する必要があります。

于 2013-01-17T14:46:39.463 に答える