2017-11-20 1 views
0

cygwin을 사용하여 Windows 7에서 bash 스크립트를 실행하려고합니다. 스크립트는 두 개의 파일 대상 목록을 가져옵니다 (파일은 서로 다른 폴더 쌍에 뿌려 짐). 파일을 반복하고 파일이 변경되었는지 검색합니다. 내가 ./shareddiff.sh 같은 명령을 실행하면Cygwin을 사용하여 Windows에서 bash 스크립트를 실행하는 데 문제가 있습니다.

#!/bin/bash 
src=(
    "./src/index.js" 
    "./src/index_2.js" 
) 
dest=(
    "./client/src/index.js" 
    "./client/src/index_2.js" 
) 

arraylength=${#src[@]}; 

for ((i=0; i<${arraylength}; i++)); 
do 
    DIFF=$(diff -u ${src[$i]} ${dest[$i]}) 
    if [ $? != 0 ]; then 
    echo "$DIFF" 
    echo "Files ${src[$i]} and ${dest[$i]} are not equal!" 
    exit 1 
    fi 
done 
echo "All files are equal" 

이 명령은 오류없이 실행,하지만 아무것도 (반향 없음 메시지)를 표시합니다. 심지어 수동으로 index.js 또는 index_2.js 파일 중 하나를 변경하더라도 변경 내용을 감지하지 못합니다.

내가 뭘 잘못하고 있을지 모르겠다.

답변

0

파일 인수를 전달할 때 diff를 잘못 사용하고 있습니다. 두 개의 파일 또는 두 개의 디렉토리를 비교할 수 있지만 두 개의 파일 목록은 비교할 수 없습니다.

SYNOPSIS 
     diff [OPTION]... FILES 

FILES are 'FILE1 FILE2' or 'DIR1 DIR2' or 'DIR FILE' or 'FILE DIR'. If 
     --from-file or --to-file is given, there are no restrictions on 
     FILE(s). If a FILE is '-', read standard input. Exit status is 0 if 
     inputs are the same, 1 if different, 2 if trouble. 

diff -uR src client/src 
+0

해야하는 코드없는이 부분'DIFF = $ (차이 -u $ {SRC [$ i]를} $ {이명 령 [$ I]를}) 시도'모든 그것 아래 작동합니까? 전체 스크립트를 'echo "Hello World"와 같이 하나의 간단한 에코로 바꾸더라도 출력이 표시되지 않습니다. – idjuradj

+0

에코가 작동하지 않는 경우 diff 문제가 아닙니다. 어떤 터미널을 사용하고 있습니까? – matzeri

+0

Cygwin을 사용하고 있습니다. – idjuradj

관련 문제