【问题标题】:Is there a way to configure sqlplus to output errors to STDERR instead of STDOUT?有没有办法配置 sqlplus 将错误输出到 STDERR 而不是 STDOUT?
【发布时间】:2020-02-23 02:15:06
【问题描述】:

如果我管这个脚本:

me:~/git/my-project$ find . -type f -not -path '*bin*' -name '*ignored*sql' -exec cat {} \;
dsadadasda SELECT * FROM some_table;

像这样进入sqlplus

me:~/git/my-project$ find . -type f -not -path '*bin*' -name '*ignored*sql' -exec cat {} \; | sqlplus $my_connection_string | grep -i unknown
SQL> SP2-0734: unknown command beginning "dsadadasda..." - rest of line ignored.

然后错误进入STDOUT 而不是STDERR

me:~/git/my-project$ find . -type f -not -path '*bin*' -name '*ignored*sql' -exec cat {} \; | sqlplus $my_connection_string 1>/dev/null
me:~/git/my-project$

有没有办法配置sqlplus 做其他事情?

【问题讨论】:

  • 您能否将 stdout 重定向到 stderr,就像您将 stdout 重定向到 /dev/null 一样? 1>&2
  • 我不确定这有什么帮助,因为错误仍然与(应该是什么)常规输出混合在一起。
  • SQL*Plus 不会将输出分开到 stdout 和 stderr。
  • 这可能是适合您的解决方案:stackoverflow.com/questions/818255/…
  • 这可能是您的解决方案stackoverflow.com/questions/818255/…

标签: linux oracle sqlplus


【解决方案1】:

我想在这里引用 Manoj:

文件描述符 1 是标准输出 (stdout)。
文件描述符 2 是标准错误 (stderr)。

这是记住这个结构的一种方法(尽管它并不完全准确):起初,2>1 可能看起来像是将 stderr 重定向到 stdout 的好方法。但是,它实际上将被解释为“将 stderr 重定向到名为 1 的文件”。 & 表示后面和前面的是文件描述符而不是文件名。所以构造变成:2>&1

将 >& 视为重定向合并运算符。

参考来源链接:In the shell, what does " 2>&1 " mean?

【讨论】:

  • 这不能回答问题。如果 sqlplus 不区分错误消息(将它们发送到 STDERR)和正常输出(将其发送到 STDOUT),那么在 shell 中使用重定向的巧妙技巧无法解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多