我正在尝试创建一个生成报告的sh,该报告将显示来自两个文件夹/ java项目的文件的差异。我正在使用dwdiff,我只需要每次比较的最后一行(我不关心差异,百分比是我需要的)。我创建了以下脚本:
DEST_FOLDER='./target/'
CLASSES_P1='classesP1.txt'
CLASSES_P2='classesP2.txt'
DEST_FILE='report.txt'
rm -r "$DEST_FOLDER"
mkdir -p "$DEST_FOLDER"
rm -f "$DEST_FOLDER/$CLASSES_P1"
rm -f "$DEST_FOLDER/$CLASSES_P2"
rm -f "$DEST_FOLDER/$DEST_FILE"
find ./p1 -name "*.java" >> "$DEST_FOLDER/$CLASSES_P1"
find ./p2 -name "*.java" >> "$DEST_FOLDER/$CLASSES_P2"
while read p; do
while read t; do
dwdiff -s $p $t | tail --lines=0 >> "$DEST_FOLDER/$DEST_FILE"
done < $DEST_FOLDER/$CLASSES_P2
done < $DEST_FOLDER/$CLASSES_P1
它工作正常,但结果不会重定向到给定文件。该文件已创建,但为空,并且每个dwdiff结果的最后一行显示在控制台中。有什么想法吗?
答案 0 :(得分:0)
正在进行一些事情
stderr
,而不是stdout
。您可以在2>&1
命令dwdiff
合并
dwdiff
打印,但由于两个不同的输出,您会看到不同的顺序。所以你想要head
而不是tail
请尝试dwdiff -s ... 2>&1 | head --lines=1
$ dwdiff -s /etc/motd /etc/issue 2>&1 | head --lines=1
old: 67 words 3 4% common 2 2% deleted 62 92% changed
或者,如果您想要new
行而不是旧行,并且为了简化排序,请尝试丢弃diff输出:
$ dwdiff -s /etc/motd /etc/issue 2>&1 1>/dev/null | tail --lines=1
new: 5 words 3 60% common 0 0% inserted 2 40% changed
请注意,重定向的顺序非常重要:首先将stdout
克隆到stderr
,然后将stdout
重定向到/dev/null
。