我正在尝试在循环中运行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}"
答案 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
放在您的脚本中,或许可以看到正在发生的事情。