2

我正在尝试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}"
4

2 回答 2

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}"

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

 cleartool findmerge "${p}" -type f -fversion .../main/LATEST -merge
于 2013-03-28T06:47:26.853 回答
0

你原来的方法应该有效。放入set -xo你的脚本,看看发生了什么。

于 2013-11-11T09:25:26.230 回答