对从循环中的单独文件中读取的多个文件运行cleartool findmerge

时间:2013-03-28 03:08:55

标签: bash clearcase

我正在尝试在循环中运行findmerge以合并其位置存储在文本文件中的特定文件集。如下所示:

while read p; do
    cleartool findmerge $p -type f -fversion .../main/LATEST -merge
done < filesToBeMerged.txt

此处filesToBeMerged.txt如下所示:

./MyProject/src/com/acme/AcmeManager.java
./MyProject/src/com/acme/AcmeLogger.java
./MyProject/build.xml

等等。

但是,当我运行上面的命令时,它只处理文件中的“第一”行然后停止。我需要做什么才能循环遍历文件中的所有行?或者像Perl脚本这样的东西更适合这个?

修改 添加bash版本:

GNU bash, version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

编辑2: 添加bash脚本autoMerge.sh

f="./filesToBeMerged.txt"
fcontent=$(cat "${f}")

while read line; do
  echo "Starting to merge: ${line}"
  cleartool findmerge "${line}" -type f -fversion .../main/LATEST -merge
done <<< "${fcontent}"
#done < "${f}"

2 个答案:

答案 0 :(得分:0)

我通常先把文件放在一个变量中:

f="/full/path/to/filesToBeMerged.txt"

while read line; do
  echo "${line}"
done < "${f}"

您也可以尝试替代

f="/full/path/to/filesToBeMerged.txt"

while read line; do
  echo "${line}"
done < <"$(cat ${f})"

fcontent=$(cat "${f}")

while read line; do
  echo "${line}"
done <<< "${fcontent}"

我更喜欢使用带引号和大括号的变量:不是$p,而是 "${p}"

 cleartool findmerge "${p}" -type f -fversion .../main/LATEST -merge

答案 1 :(得分:0)

您的原始方法应该有效。将set -xo放在您的脚本中,或许可以看到正在发生的事情。