为什么bash脚本的输出可能出错?

时间:2012-06-21 11:28:47

标签: bash clearcase

我遇到了一个产生无序输出的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脚本产生这样一个错位输出? 考虑到它适用于许多目录,我认为问题不在于代码本身,而在于脚本读取的数据。

2 个答案:

答案 0 :(得分:6)

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

这是一个很高的命令。

不过,我的猜测是(并且注意它不能超过猜测,因为我不知道脚本在做什么)某种竞争条件,其中脚本的步骤相互依赖但不会被强制同步,导致他们以意想不到的顺序完成失败。

引用“代码是从某个地方复制”作为一个没有错误的原因也是非常离谱的,真的。

答案 1 :(得分:0)

注意:您的脚本应该是:

  • 签出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报告:

  

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