删除或清除堆栈的弹出/推入路径


39

经过pushd太多次之后,我想清除整个路径栈。

如何popd处理堆栈中的所有项目?

我不想popd知道堆栈中有多少个?

bash手册似乎没有涵盖这一点

为什么我需要知道这一点?我很挑剔,要清理堆栈。


1
顺便说一句,完整的bash手册已在gnu.org上结束。如果您使用全部一页的版本,则可能更容易在此处找到内容。
jw013

啊,希望google将其索引。感谢@ jw013
chrisjlee 2012年

Answers:



8

为了清空堆栈从堆栈底部还原工作目录,请执行以下任一操作:

  • 从中检索该目录dirs,更改为该目录,然后清除堆栈:

    cd "$(dirs -l -0)" && dirs -c

    -l这里的选项将列出完整路径,以确保尝试cd进入时不会失败~,并-0从堆栈底部检索第一个条目。

    @ jw013建议通过避免路径扩展使此命令更健壮:

    pushd -0 && dirs -c
  • 或者,popd直到遇到错误(popd目录堆栈为空时的调用状态)为止:

    while (( $? == 0 )); do popd; done

1
第一种方法正是我想要的。第二个在我的情况下不起作用,因为我已经打pushd了几次电话,然后删除了中间的一个目录,然后popd在尝试展开时失败了。我需要跳过中间所有经过考验的内容,以回到开始的地方。
查克·威尔伯

正确@ChuckWilbur-如果您扰乱了目录堆栈,popd将无法挽救您:)
Eliran Malka

最好pushd -0代替cd "$(dirs ...)"
jw013

@ jw013怎么回事?这将进一步混淆目录堆栈(我们正在此处尝试清除。)
Eliran Malka

1
cd "$(...)"可以在90%的用例中使用,甚至可以在99%的用例中使用,但是pushd -0您可以放心地说100%。与扩展外壳中的文件/目录路径相关联的潜在陷阱和边缘情况如此之多,以至于最健壮的事情就是完全避免它,这pushd -0非常简洁。如果您从不冒险,就不可能被带有奇怪边缘情况的错误所抓住。如果您想进一步阅读Unix文件/路径名可能带来的麻烦,那么一个很好的起点是mywiki.wooledge.org/ParsingLs
jw013 2007年
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.