【问题标题】:Why the output of a bash script can be out of order? [closed]为什么 bash 脚本的输出会乱序? [关闭]
【发布时间】:2012-06-21 11:28:46
【问题描述】:

我遇到了一个 bash 脚本的问题,该脚本产生了乱序输出。
该脚本在多个地方使用,通常可以正常工作。

然而,在一个特定的目录中,它完全不同步并使其输出文件无用。
目录结构相同,其输入数据也非常相似。 (在 ClearCase 中工作,如果这有影响的话。)

当 bash 正常运行时,它的输出如下所示:

Techpack Meta Version is currently 3, has this changed? y/n n
Have Techpack Version Dependencies changed? y/n n
Updating Version Properties

Building TPI File
Inside make_tpi_file
Created ../package/12.0/M_E_LCHS_DATAGEN_R0E_b1.tpi
Checked out "package/12.0/" from version "/main/at_job/1".
Created element "package/12.0/M_E_LCHS_DATAGEN_R0E_b1.tpi" (type "compressed_file").
Created branch "at_job" from "package/12.0/M_E_LCHS_DATAGEN_R0E_b1.tpi" version "/main/0".
Checked out "package/12.0/M_E_LCHS_DATAGEN_R0E_b1.tpi" from version "/main/at_job/0".
Checked in "package/12.0/M_E_LCHS_DATAGEN_R0E_b1.tpi" version "/main/at_job/1".
Checked in "package/12.0/" version "/main/at_job/2".

当 bash 不起作用时,它的输出如下所示:

Techpack Meta Version is currently 3, has this changed? y/n n
Have Techpack Version Dependencies changed? y/n n
Updating Version Properties

Building TPI File
Inside make_tpi_file
_R0E_b1.tpipackage/12.0/M_E_HANF_DATAGEN
Checked out "package/12.0/" from version "/main/at_job/4".
_R0E_b1.tpi" (type "compressed_file").A_DATAGEN
_R0E_b1.tpi" version "/main/0".package/12.0/M_E_HANF_DATAGEN
_R0E_b1.tpi" from version "/main/at_job/0".
_R0E_b1.tpi" version "/main/at_job/1".GEN
Checked in "package/12.0/" version "/main/at_job/5".

/vobs/job/job_mg/test_tools/Data_Generator/HANF/FeatureTest/build
Checked in "install/version.properties" version "/main/at_job/14".
Checked in "../package/12.2/build.number" version "/main/at_job/4".

一般来说,什么会导致 bash 脚本产生这样一个错误的输出?
考虑到它适用于许多目录,我认为问题不在于代码本身,而在于脚本读取的数据。

【问题讨论】:

  • 您能否将打印Created element 的字符串附近的一段代码提供给您。您可以通过grep -C5 找到此部分
  • "bash 文件本身是一个复制粘贴,所以我怀疑这是一个编码问题。" - 大声笑,这很有趣!

标签: bash clearcase


【解决方案1】:

说真的,您希望我们调试脚本时只看到其输出吗?

这是一项艰巨的任务。

不过,我的猜测是(请注意,它只能是猜测,因为我不知道脚本在做什么)某种竞争条件,其中脚本的步骤相互依赖但没有强制同步,当它们以意外的顺序完成时会导致失败。

引用“代码是从某个地方复制的”作为它应该没有错误的理由也是非常离谱的,真的。

【讨论】:

  • 嘿,对不起,伙计们提出了一个粗略的问题。我很抱歉。感谢您阅读并提出放松建议。原来我的问题是上面提到的脚本从另一个文件中读取变量。一些所说的变量有尾随空格字符,这是原因。只是想我会在解决方案是什么。再次抱歉问了一个糟糕的问题。
【解决方案2】:

注意:你的脚本应该做的是:

  • 签出tpi文件的父目录
  • 创建元素(文件)tpi (cleartool mkelem)
  • 签出该(新的和空的)元素
  • (其内容被正在构建的实际 tpi 文件覆盖)
  • 签入该文件
  • 检查父目录。

您需要检查您的 bash 脚本如何调用 clearcase 命令,因为似乎存在刷新问题(类似于“Getting another program's output as input on the fly”)

如果您的脚本正在设置动态视图,则可能会发生这种情况:请参阅“Python and ClearCase setview”:cleartool setview 创建一个子 shell,这会使输出有点随机。

在 OP 的情况下,patrick 报告:

我的问题是由读取变量中的隐藏空白字符引起的:
我的问题是上面提到的脚本从另一个文件中读取变量
一些上述变量有尾随空格字符,这是原因。

【讨论】:

  • 感谢 VonC,我的问题是由读取变量中隐藏的空白字符引起的。
  • @patrick 好的。为了提高知名度,我已将您的结论包含在答案中。
猜你喜欢
  • 2013-11-12
  • 2013-07-08
  • 2019-07-26
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多