함수가 호출되지 않았고 스크립트가 종료되었습니다.

함수가 호출되지 않았고 스크립트가 종료되었습니다.

RM_OBJ_P그래서 메뉴 페이지에서 호출되는 함수를 얻었습니다 PAGE_RM. 이것은 작동합니다. 알고 있는 모든 펑키한 파일 이름을 입력할 수 있으며 해당 파일 이름이 데이터베이스에 있으면 출력이 텍스트 파일로 인쇄됩니다(제가 원했던 것처럼). 그러나 x호출해야 할 "마법" 옵션을 어리석게 선택하면 스크립트가 종료됩니다. 내가 뭘 잘못했나요? (나는 또한 대신에 이것을 사용하여 이것을 달성하려고 노력했습니다)XPAGE_RM
return 0PAGE_RM

편집: 분명히 x선택 입력도 호출됩니다 RM_P_*(추가된 로그 참조).

RM_OBJ_P() {
echo "After you have finished, you can find the file here: $ACTIVE_DB/remove.txt"
echo
if [ ! -f file.txt ] ; then
    read -p "Please enter the name of the file you'd like to check (or x to return): " CHOICE
    case "$CHOICE" in
        *) RM_P_N ;;
        x|X) PAGE_RM ;;
    esac
else
    read -p "Please enter the name of the file you'd like to check: " CHOICE
    echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" >>$ACTIVE_DB/remove.txt
    echo "If you want to remove $CHOICE, please consider this:" >>$ACTIVE_DB/remove.txt
    case "$CHOICE" in
        *) RM_P_E;;
        x|X) PAGE_RM ;;
    esac
fi
}

중요 RM_P_N하고 둘 다 RM_P_E이렇고 예상대로 작동하는 경우

RM_P_*() {
echo "something gets an echo echo echo o o o" >file.txt
PATH/TO/perl_script.pl "$CHOICE" database_query >>file.txt
RM_OBJ_P
}

마지막으로 중요한 것은,PAGE_RM

PAGE_RM() {
    clear
    while :; do
        PRINT_BANNER_S
        PRINT_RM_MENU
        echo "single - view"
        echo "print  - print"
        PRINT_LINE
        echo "x      - go back"
        PRINT_LINE3
        read -p "CHOICE: " CHOICE
            case "$CHOICE" in
                s|S) RM_OBJ ;;
                p|P) RM_OBJ_P ;;
                x|X) return 0
                PRINT_LINE
            esac
    done
}

다음은 로그의 관련 부분입니다.

+ RM_OBJ_P
+ echo 'After you have finished, you can find the file here: DB_45763/remove.txt'
+ echo
+ '[' '!' -f DB_45763/remove.txt ']'
+ read -p 'Please enter the name of the file you'\''d like to check: ' CHOICE
Please enter the name of the file you'd like to check: + echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
+ echo 'If you want to remove x, please consider this:'
+ case "$CHOICE" in
+ RM_P_E
+ echo 'If you want to remove x, please consider this:'
+ ./files/perls/remove_object.pl x dbi:SQLite:dbname=test.sqlite '' ''

답변1

괜찮아요,
[묻기 전에 생각하는 좋은 예] 이렇게 풀어보세요. 더 나은 해결방법이 있으면 답변 부탁드립니다

RM_OBJ_P() {
echo "After you have finished, you can find the file here: $ACTIVE_DB/remove.txt"
echo
if [ ! -f $ACTIVE_DB/remove.txt ] ; then
    read -p "Please enter the name of the file you'd like to check (x to abort): " CHOICE
    if [[ $CHOICE = x ]] ; then
        PAGE_RM
    else
        RM_P_N
    fi
else
    read -p "Please enter the name of the file you'd like to check (x to abort): " CHOICE
    echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" >>$ACTIVE_DB/remove.txt
    echo "If you want to remove $CHOICE, please consider this:" >>$ACTIVE_DB/remove.txt
    if [[ $CHOICE = x ]] ; then
        PAGE_RM
    else
        RM_P_E
   fi
fi
}

관련 정보