無限ループ?無害なコードが原因のようです。

無限ループ?無害なコードが原因のようです。

この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

おすすめ記事