echo string >> 파일이 작동하지 않습니다

echo string >> 파일이 작동하지 않습니다

나는 다음 스크립트를 작성했습니다.

"find . -name '*'.cpp | $IN_REGEX | grep $IN_REGEX | grep -v $OUT_REGEX`
하다
    echo "출력 파일은 $OUTPUT_FILE입니다."
    count=`git log --pretty=형식: --name-only $filename | grep -v ^$ |
    echo "$count $filename" >> $OUTPUT_FILE
완벽한

그러나 출력 파일에는 아무 것도 기록되지 않습니다.

참고:

  1. OUTPUT_FILEIN_REGEX, 및 의 값을 설정했습니다 OUT_REGEX.
  2. 루프 내부의 코드가 실행되고 있습니다. sh -x전화해서 확인해봤습니다 .
  3. 삭제하면 >> $OUTPUT_FILE출력이 표시됩니다.
  4. touch $OUTPUT_FILE스크립트 내에서 시도해 보았는데 훌륭하게 작동합니다.

누군가 내 실수를 지적할 수 있나요?

답변1

$OUTPUT_FILE이 존재합니까? 해당 권한( ls -l $OUTPUT_FILE, ) 은 무엇입니까 getfacl $OUTPUT_FILE? 몇 번이나 실행되었나요 echo "Output file..."? (나는 그것을 생략하고 싶지만 for그것은 당신의 결정입니다)?

find ...(귀하의 파이프가 아무것도 반환하지 않는 것 같습니다 )

답변2

이 문제를 해결하는 데 도움이 될 수 있는 몇 가지 아이디어는 다음과 같습니다.

  • 파일로의 표준 리디렉션 대신 파일을 파이프 tee하여 포함합니다. stdout에서 출력을 확인하고 $OUTPUT_FILE로 이동하기를 바랍니다. 예를 들어:

    echo "$count $filename" 티 $OUTPUT_FILE |

  • $OUTPUT_FILE에는 상대 경로가 아닌 절대 경로를 사용하여 호출 스크립트의 위치에 종속되지 않도록 하세요. 상대를 사용하는 경우 올바른 위치에서 출력 파일을 찾지 못할 수 있습니다.

  • 계속해서 -x를 사용하여 스크립트를 호출하면 스크립트를 실행할 때 무슨 일이 일어나는지 정확히 확인할 수 있습니다. 리디렉션 시 $OUTPUT_FILE 값을 반드시 설정해 주세요.

  • sh를 사용하지 않을 경우 bash에서 스크립트를 사용해 볼 수 있습니다. 그런 다음 set 내장을 사용하여 일부 bash 옵션을 사용할 수 있습니다(참고자료 참조 help set). 스크립트를 개발할 때 0이 아닌 종료 상태가 반환되면 스크립트가 종료되도록 "set -e"를 수행하는 것이 유용할 수 있습니다. 파이프라인 오류 상태를 처리해야 할 수도 있습니다. 따라서 디버깅을 돕기 위해 다음을 스크립트 상단에 넣을 수 있습니다.

    set -x
    set -e
    # Optionally:
    set -o pipefail
    

관련 정보