【发布时间】:2020-04-16 23:18:56
【问题描述】:
问题基本上就是这样。尝试使用给定的组合键实现“后退”和“前进”功能。我认为最好的方法是创建一堆访问过的目录,一个用于前进,一个用于后退。这是最好的方法吗?是否有一个变量已经保存了我可以调用的这些信息?在我意识到我不能只保存最新的目录之前,我就有了这个。
previous_wd='~'
next_wd='~'
cd()
{
previous_wd=$(pwd)
builtin cd "$@"
}
back_to_previous_directory()
{
next_wd=$(pwd)
cd "$previous_wd"
}
forward_to_previous_directory()
{
cd "$next_wd"
}
up_a_directory()
{
cd ..
}
# \C-u clears the line
bind '"\e[1;3D":" \C-uback_to_previous_directory\n"' # go back a directory on alt+left
bind '"\e[1;3A":" \C-uup_a_directory\n"' # go up a directory on alt+up
bind '"\e[1;3C":" \C-uforward_to_previous_directory\n"' # go forward a directory on alt+right
【问题讨论】:
-
cd -可能会做你想要实现的事情吗? -
不清楚您所说的“上一个”/“前进”/等是什么意思。给出一个具体的例子,说明 cwd 应该如何使用你的绑定来改变。如果您在不使用绑定的情况下键入
cd another_dir或popd会发生什么? -
@khansh :返回是微不足道的(使用
popd,如果你使用pushd而不是cd来更改目录),但 bash 不提供继续前进。在这种情况下,您确实必须编写自己的函数。您的方法还不错,但是您需要存储到目前为止访问过的目录的列表,而不是previous_wd和next_wd,以便您可以在列表中前进/后退。我建议您为此使用 bash 数组,并且您还需要一个指针(该数组的索引以指向您现在所在目录的位置。
标签: bash shell directory scripting stack