종료 명령을 사용하여 스크립트 l 루프를 중지할 수 없습니다.

종료 명령을 사용하여 스크립트 l 루프를 중지할 수 없습니다.

내 스크립트(nemo.action을 통해 실행)에는 오류가 발생할 때 사용자에게 중지할 것인지 아니면 계속할 것인지 묻는 zenith 팝업을 사용하는 디버그 기능이 있습니다. 그러나 이것이 루프 내에서 발생하면 exit스크립트의 명령이 완전히 무시될 수 있습니다.

어쨌든 스크립트를 완전히 중지하려면 강제 종료할 수 있는 방법이 없나요? 도도새처럼 죽기를 바라요! 본인이 직접 죽여야 하는데..

이것은 내 디버깅의 일부입니다.

44:57.198 • Stopped while renaming file/directory  - it failed
44:57.199 • Error triggered, issue:
44:57.201 • Stopped while renaming file/directory.\nSee debug log for more info...

45:20.563 • Stopping the script by user request due error. ()
   ^^^ this line gets written to the log when the user choose to exit
 vvv but it continues to run the script until a new error occurs
45:20.564 • Could not find ‘/temp/sani.txt‘ Have no value to assign to $jdir0
45:20.566 • Error triggered, issue:
45:20.567 • Could not find ‘/temp/sani.txt‘ Have no value to assign to $jdir0
45:24.670 • Stopping the script by user request due error. ()
^^^ and when pressing stop here, the script will halt..

이는 동일한 오류 함수가 트리거되는 것입니다.

jerror () {
    enl
    jdbugen "Error triggered, issue:\n\n"
    jdbug "$@"
    debuglogread=$(tail -10 "$debuglog")
    zenity --question  --text="($jdec)Error Triggered\nIssue:\n\n ‘$@‘\n\n$debuglogread\n\nContinue?"  --width=400 --height=200
    jdec=$?
    if [ "$jdec" != 0 ]
    then
        jdbug "Stopping the script by user request due error. ($jdeck)"
        exit 1
    else
        jdbug "User choose to continue the script"
    fi
    enl
}

스크립트의 이 부분은 함수를 호출합니다.

mv -f  -v "$item" "$path/$name"    &>>  $debuglog  # Rename
    jok=$?
    if [ $jok -ne 0 ]
    then
        jdbug "Stopped while renaming file/directory  - it failed"
        jerror "Stopped while renaming file/directory.\nSee debug log for more info..."
    fi

답변1

이것이 쉽지 않아서 종료 요청을 파일에 저장하여 해결했습니다.

문자열을 추가하여 printf "%d" "1" > "/tmp/exitcode.dat"값 1을 임시 파일에 저장합니다.

   printf "%d" "1" > "/tmp/exitcode.dat"  # Storing the exit code
   exit 1                                # Will break of of the loop
 

루프 이후"완벽한"명령을 실행하면 파일을 다시 읽어야 합니다.

if [[ -f "/tmp/exitcode.dat" ]] 
then
 jexit="$(</tmp/exitcode.dat)"   # Read the stored code
 rm "/tmp/exitcode.dat"              # Clean up and remove the file
 if [ $jexit eq 1 ]; then exit 1;     # Check if exit code is 1
fi
    

더 짧은 코드는 파일을 생성하는 것입니다.

    touch "/tmp/exitcode.dat"      # Create the file
    exit 1                         # Exit the loop

그리고 그 이후완벽한주문하다

if [[ -f "/tmp/exitcode.dat" ]]; Then   # See if the file exists
        rm "/tmp/exitcode.dat"              # Cleanup
        exit 1                    # Exit the script
fi

관련 정보