【发布时间】: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。