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