무한 루프? 무해한 코드로 인해 발생하는 것 같습니다.

무한 루프? 무해한 코드로 인해 발생하는 것 같습니다.

이 bash 기능이 있습니다.

botch_get_prev_cd(){
    local dr=$(declare -f cd);
    local dr_trimmed="$(tr -d "$dr")"

    if [[ "$dr_trimmed" != *"run_botch"* ]]; then
        definition_prev_cd="prev_$dr"
        echo "$definition_prev_cd";
        eval "${definition_prev_cd}"
        unset definition_prev_cd  # clean up, no reason to leave this string around
        export -f prev_cd
    fi
}

호출하면 루틴이 멈추고 무한 루프에 빠지는 것처럼 보입니다.

코드를 다음과 같이 변경하면 작동합니다.

botch_get_prev_cd(){
    local dr=$(declare -f cd);

    if [[ "$dr" != *"run_botch"* ]]; then
        definition_prev_cd="prev_$dr"
        echo "$definition_prev_cd";
        eval "${definition_prev_cd}"
        unset definition_prev_cd  # clean up, no reason to leave this string around
        export -f prev_cd
    fi
}

그렇다면 일치하는 문자를 확인하기 위해 공백을 잘라낼 필요가 없을 수도 있습니다. 첫 번째 기능이 작동하지 않는 것 같고 왜 무한 루프에 빠지는 지 잘 모르겠습니다.

답변1

이것은 무한 루프가 아닙니다.

tr -d "$dr"

입력을 기다리고 있습니다.

tr다음을 사용하여 변수에 저장된 값에서 문자를 제거 하려는 경우 정확히 무엇을 하려는지 잘 모르겠습니다.

tr -d " " <<<"$dr"

에 저장된 값에서 모든 공백이 제거됩니다 dr.

답변2

코드의 한 가지 문제는 다음 줄입니다.

local dr_trimmed="$(tr -d "$dr")"

나는 이것이 제거 할 $dr문자 범위 라고 가정합니다.tr표준 입력tr, 처리할 데이터를 제공하는 것을 잊어버렸습니다 . 그래서 거기 앉아서 사람들을 기다리고 있어요.

관련 정보