【问题标题】:Differences in order of stderr and stdout generates a problemstderr 和 stdout 的顺序不同会产生问题
【发布时间】:2019-03-24 19:38:15
【问题描述】:

在 AIX 中,当我编写这样的脚本 (test.sch) 时:

#!/bin/ksh
echo "testing" 2>./r1.log 1>./r2.log
exit 0

如果我执行:

sh -x test.sch

回复是:

cat r1.log
1> ./r2.log
cat r2.log
testing

为什么 r1.log 出现在命令的一部分?

但是如果我在shell中改变顺序:

#!/bin/ksh
echo "testing" 1>./r2.log 2>./r1.log
exit 0

文件 r1.log 为空。

cat r1.log
cat r2.log
testing

其他服务器中的此代码工作正常。我必须修复什么配置才能使其正常工作?

总结

不能省略 -x 标志,因为我使用 control-m(这里使用 -x)。但我意识到错误发生在不同的 AIX 服务器中。我想除了改变输出的顺序之外没有其他解决方案。谢谢你们的cmets!!!!

【问题讨论】:

  • 真正的问题是什么? set -x 是一个调试功能,它的输出很可能是平台相关的。
  • 我希望r1.log 在这两种情况下都是空的,因为echo 没有向标准错误写入任何内容。我不知道cat ... 行来自哪里,因为您的脚本根本没有运行cat
  • 无法使用提供的脚本重现该问题。无论顺序如何,日志文件的内容都不会改变。但是您实际调用 -x 选项的方式使您的 shell (sh ?) 处于调试模式,而不是用于运行脚本的 shell 的 ksh。如果你想调试你的脚本,你应该在脚本中的 shebang 之后添加 set -x。
  • @OP:只需从命令中删除-x 部分:sh test.sch

标签: unix sh ksh aix


【解决方案1】:

set -x(或相应的sh -x,“xtrace”的缩写)打开调试模式。调试模式打印出执行到的每一行。来自 ksh 的 AIX 手册页:

   -x
        Prints executed commands and their arguments.

这就是为什么您会在日志文件中看到捕获的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2018-10-31
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2014-03-11
    • 2020-05-30
    相关资源
    最近更新 更多