我使用 Ranger在我的终端中移动文件管理器。每次我使用 S
命令放入一个新目录时,Ranger 实际上是在启动一个新的 shell。当我想关闭终端窗口时,我需要运行 exit
的次数与我使用 Ranger 更改目录的次数相同。是否有一个命令会递归地为我运行 exit
直到窗口关闭?或者更好的是,是否可以使用不同的 Ranger 命令?
最佳答案
不要进入子 shell,只需退出 ranger 并让 shell 从 ranger 同步回目录。
function ranger {
local IFS=$'\t\n'
local tempfile="$(mktemp -t tmp.XXXXXX)"
local ranger_cmd=(
command
ranger
--cmd="map Q chain shell echo %d > "$tempfile"; quitall"
)
${ranger_cmd[@]} "$@"
if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$PWD" ]]; then
cd -- "$(cat "$tempfile")" || return
fi
command rm -f -- "$tempfile" 2>/dev/null
}
按 capital Q 退出 ranger,之后 shell 会自动将目录同步到 ranger 中的同一目录。
这非常灵活,您可以使用 q 正常退出而无需将目录同步回 shell。
更新:
。 ranger
打开 ranger 是另一种解决方案,不推荐。因为与之前的方法相比,退出。带有 q 的 ranger
将始终将目录从 ranger 同步回 shell。您无法控制此行为。
No real solution to this. It's oft requested but not as easy as people think. You can source ranger, so start it like this
. ranger
. That'll cd to ranger's cwd when quitting.
引用资料
关于bash - 如何递归退出嵌套的shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903114/