![무한 루프? 무해한 코드로 인해 발생하는 것 같습니다.](https://linux55.com/image/132561/%EB%AC%B4%ED%95%9C%20%EB%A3%A8%ED%94%84%3F%20%EB%AC%B4%ED%95%B4%ED%95%9C%20%EC%BD%94%EB%93%9C%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94%20%EA%B2%83%20%EA%B0%99%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 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
, 처리할 데이터를 제공하는 것을 잊어버렸습니다 . 그래서 거기 앉아서 사람들을 기다리고 있어요.