首页 > 解决方案 > 使用 popd、pushd 时获取我的目录堆栈中不同目录路径的引用

问题描述

我正在编写一个用于在我的工作中自动化构建过程的脚本。我正在使用 pushd 和 popd 来跟踪并导航回目录堆栈。有没有办法获得目录堆栈中某个索引的引用路径?例如,我将向上导航树,并在移动时将目录推送到堆栈。最终,我想找到一个文件,并将其移动到堆栈上的目录路径之一。我一开始尝试做“mv file.txt popd”,但当然这一切都是改变file.txt的名称。

简而言之,如何获得对目录堆栈上路径的引用?

标签: bash

解决方案


dirs命令可以在调用时显示目录堆栈中指定索引处的条目dirs +Ndirs -N,其中N是数字。如果您想将其用作命令的参数,则需要命令替换,例如mv file.txt "$(dirs +2)".

请注意,默认情况下,对于位于主目录中的目录堆栈上的任何条目,使用代替主目录的路径将dirs其打印出来。~但是在解析命令时,bash 会在波浪号扩展后进行命令替换,因此它不会将命令~打印的内容替换dirs为您的主目录的路径。为了解决这个问题,您需要提供-l选项dirs以防止它像~一开始那样打印主目录。(感谢贾斯汀注意到这一点)

您可以dirs通过运行help dirs或查看 bash 的手册页(大约四分之三)来获得有关可以执行的操作的全部详细信息。


推荐阅读