【问题标题】:Get a reference of the different directory paths in my directory stack when using popd, pushd使用 popd、pushd 时获取我的目录堆栈中不同目录路径的引用
【发布时间】:2019-03-26 23:51:31
【问题描述】:

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

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

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

    您可以通过运行 help dirs 或查看 bash 的手册页(大约四分之三)来了解 dirs 可以做什么。

    【讨论】:

    • 当我尝试完全按照上面的方式进行操作时,只是 +N 的值不同,我得到了这个响应,但似乎没有发生任何事情 mv: rename timesheet.pdf to ~/Desktop/OFW/ios: No such file or directory。我所做的只是添加 -l 修饰符使其看起来像 mv file.txt "$(dirs -l +1)",它按预期工作
    • 啊,好吧,我没有意识到它会那样做。为了未来读者的利益,我会更新我的答案。感谢您的反馈!
    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多