두 파일의 차이점을 찾으려고 노력하고 있지만 아무 것도 생성할 수 없습니다. 이게 내가 한 일이야
#Compare files and redirect output
ACTUAL_DIFF=`diff file.current file.previous 2>/dev/null`
if [ $? -ne 0 ]
then
echo "Comparing /tmp/file.current state (<) to /tmp/file.previous state (>), difference is: "
echo ""
echo $ACTUAL_DIFF | cut -f2,3 -d" "
echo ""
else
echo "The current file state is identical to the previous run (on `ls -l file.previous | cut -f6,7,8 -d" "`) OR this is the initial run!"
echo ""
cat /tmp/file.diff
echo ""
fi
답변1
변수를 따옴표로 묶어야 합니다. 그렇지 않으면 개행 문자가 단어 구분 기호로 처리되어 모든 출력이 한 줄에 표시됩니다.
echo "$ACTUAL_DIFF" | cut -f2,3 -d" "
또 다른 방법은 변수를 사용하지 않고 다음 diff
으로 직접 파이프하는 것입니다 cut
.
diff file.current file.previous 2>/dev/null | cut -f2,3 -d" "
cmp
처음에는 더 간단한 명령을 사용하여 파일이 다른지 테스트 할 수 있습니다.
출력을 파일에 저장하고 표시하려면 이 tee
명령을 사용하십시오.
#Compare files and redirect output
ACTUAL_DIFF=`diff file.current file.previous 2>/dev/null`
if ! cmp -s file.current file.previous 2>/dev/null
then
echo "Comparing /tmp/file.current state (<) to /tmp/file.previous state (>), difference is: "
echo ""
diff file.current file.previous 2>/dev/null | cut -f2,3 -d" " | tee /tmp/file.diff
echo ""
else
echo "The current file state is identical to the previous run (on `ls -l file.previous | cut -f6,7,8 -d" "`) OR this is the initial run!"
echo ""
cat /tmp/file.diff
echo ""
fi