有没有办法在 bash 中多次 cd 返回?

tim*_*one 64 bash cd-command

我经常cd -回到我原来的地方。如何在 bash 中多次执行此操作?或者 zsh 或其他一些工具会支持这个吗?

小智 55

在 zsh 中,有一个auto_pushd选项。此选项使cd行为类似于pushd. 然后您可以使用popd返回到以前的目录。

~ $ setopt auto_pushd
~ $ cd /
/ $ cd /var
/var $ cd /usr
/usr $ dirs
/usr /var / ~
/usr $ popd
/var $ popd
/ $ popd
~ $
Run Code Online (Sandbox Code Playgroud)

在 Bash 中,您可以别名cdpushd.

alias cd=pushd
Run Code Online (Sandbox Code Playgroud)

这样做的一个缺点是您将丢失cd的三个标志。从cd帮助条目:

-L 强制跟随符号链接
-P 使用物理目录结构而不跟随符号链接
-e 如果提供了 -P 选项,并且无法成功确定当前工作目录,则以非零状态退出

如果您不得不使用实际的cd内置函数而不是别名,您可以使用以下其中一种:

  • 'cd' - 引用该命令会使 shell 不解析别名并使用普通的 cd。
  • \cd- 反斜杠引号字符。如果引用单词的一个字符,shell 会将整个单词视为引用。
  • builtin cd - 这直接告诉 shell 使用内置而不是别名。


小智 24

这是一种方便快捷地为目录添加书签并跳回它们的快速而肮脏的方法:

$ a() { alias $1="cd $PWD"; }
Run Code Online (Sandbox Code Playgroud)

去某个地方并输入:

$ a 1
Run Code Online (Sandbox Code Playgroud)

您现在有一个名为的命令1,它执行cd当前的目录。稍后只需键入:

$ 1
Run Code Online (Sandbox Code Playgroud)

然后,回到那个目录。我觉得这非常有用。

  • +1。这是一个绝妙的主意。如果您当前的工作目录在某处有空格,它就会中断。要解决这个问题,您应该将 `$PWD` 放在双引号中:`"$PWD"`。 (7认同)

小智 19

猛击

我找到了一个脚本,可以在这里找到,它为我解决了这个问题。有了这个,您可以键入cd --以查看您使用的最后 10 个目录。它看起来像这样:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc
Run Code Online (Sandbox Code Playgroud)

~/Music/thirddir只是输入cd -2

zsh

oh-my-zsh 为此提供了一些非常好的功能(至少我认为它是 oh-my-zsh 设置的)。

基本上,d别名为dirs -v | head -10

dirs 是一个 zsh 内置命令,显示您最近访问过的目录。

此外,对于所有数字,1别名为cd -1等等9

在实践中,它是这样工作的:

$ pwd
/home/me/Documents/gems/java_regex/lib

$ d
0       ~/Documents/gems/java_regex/lib
1       ~/Documents/gems/java_regex
2       ~/Documents/gems
3       ~/Documents
4       ~

$ 2
~/Documents/gems

$ pwd
/home/me/Documents/gems
Run Code Online (Sandbox Code Playgroud)

  • acd_func 可以在以下位置找到:https://github.com/djoot/all-bash-history/blob/master/acd_func.sh (2认同)

Tho*_*man 7

您可以使用pushd内置的 bash 将新的工作目录推送到目录堆栈中。使用popd弹出堆栈的目录,以便返回到先前的工作目录。