使用popd而不删除最后一个值


8

如何在popd没有实际弹出最后一个目录的情况下获得使用的行为?换句话说,我想导航回到我设置的最后一个目录pushd,但是我希望它保留在堆栈的顶部,因此下popd一个目录会将我带到同一目录(该目录仍然位于目录的顶部)。堆栈)。


请问“ cd-”行不通吗?据我了解,顺序为:“推d1;推d2;推d3;”。现在回到d2吧?
tpb261

cd -可以使用,但前提是您只有cd在准备好之前没有其他地方使用popd。在我准备返回之前,我通常会
跳到

这很明显..但是我不知何故想念了您问题中隐含的“反弹”部分。
tpb261

Answers:


2

怎么样: cd "$(dirs -l -p | sed -n '2{p;q}')"


太棒了,谢谢你!如果我曾经看过的话,那可真是个疯子。我将该命令别名为peekd(有点C ++ STL风格,我很容易记住),所以我可以键入peekd以获取行为。 alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben

3
@Freedom_Ben这可以简化为cd "$(dirs +1)"
别再成为邪恶了'

@Gilles当我尝试执行此操作时,即使它显然存在,它也会显示“ bash:cd <我的目录>:没有这样的文件或目录”。你知道那是为什么吗?cd是否无法将<my directory>正确解释为路径?从错误消息看来,它应该可以工作。即,<我的目录>看起来正确,如果我只键入“ cd <我的目录>”,它就可以工作。
nukeguy

1
@nukeguy是否<my directory>以波浪号开头?我在上面的评论中缺少-l列出完整目录而不是使用~缩写的选项。应该是cd "(dirs -l +1)"
吉尔斯(Gilles'SO-别成为邪恶)

@吉尔斯是的!那正是我在寻找的东西,谢谢!也许您应该将评论作为一个单独的解决方案发布-在我看来,这是该线程上最通用,最有用的选项。
nukeguy

10

不带参数的情况下推送将交换堆栈中的前两个条目,使您可以在它们之间有效地来回CD。

从d1开始,执行push d2将d1和d2添加到堆栈中,并使您进入d2。再次执行无参数推入,然后返回d1,而d1和d2在堆栈上反转。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.