背景
我有一个很长的Sql*plus脚本,由于某种原因需要使用感叹号语法运行一些 unix 命令。
我写一个假脱机以便在进程结束时有一个日志文件。
问题是如果操作系统命令失败,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 写入被假脱机的文件,可以做些什么?
更新
我尝试了lc. 的2>&1
建议, 在每个 cp 命令的末尾附加 ,以便将 stderr 重定向到 stdout,但我得到了这个:
Enter value for 1:
更新 2
SET DEFINE OFF
使其不提示输入值。它让我发现不仅 stderr 没有被假脱机:stdout 也没有。似乎一切都用“!”执行 是不可假脱机的。