バックグラウンド
何らかの理由で感嘆符構文を使用していくつかの UNIX コマンドを実行する必要がある長いSql*plusスクリプトがあります。
プロセスの最後にログ ファイルを作成するために、スプールに書き込みます。
問題は、OS コマンドが失敗した場合、stderrが失われ、スプール ファイルに移動しないことです。
サンプルコード
spool mylog.txt
!echo alter user xxx identified by yyyy;
alter user xxx identified by yyyy;
!echo cp file1 folder1/
!cp file1 folder1/
!echo alter user yyy identified by xxx;
alter user yyy identified by xxx;
!echo cp file2 folder2/
!cp file2 folder2/
spool off
失敗した場合cp
、mylog.txt を見ただけではわかりません。
明らかに、そう!cp file1 folder1/ &> mylog.txt
することは、スプールされているログを予測できない方法で台無しにするだけです。
質問
UNIX コマンドの stderr をスプール先のファイルに書き込むにはどうすればよいですか?
アップデート
stderrをstdoutにリダイレクトするために、すべてのcpコマンドの最後に追加して、 lc.の提案 を試しましたが、次のようになりました。2>&1
Enter value for 1:
更新 2
SET DEFINE OFF
値を入力しないようにしました。スプールされないのは stderr だけではなく、stdout もスプールされないことがわかりました。すべて「!」で実行されたようです。はスプール不可です。