shell popd_使用push和popd导航Bash shell

shell popd

pushpopd命令是Bash shell的内置功能,可帮助您“标记”目录,以便在硬盘上的位置之间快速导航。 您可能已经感觉到终端是一种无法快速浏览计算机的方式。 只需按几次键,您就可以访问硬盘驱动器,附加存储或网络共享中的任何位置。 但是,当您发现自己在目录之间来回移动或在文件系统中“丢失”时,该速度可能会降低。 这些恰恰是问题pushdpopd命令可以帮你解决。

从最基本的角度来看push很像cd 。 它会将您从一个目录转到另一个目录。 假设您有一个名为one的目录,其中包含一个名为2的子目录,其中包含一个名为3的子目录,依此类推。 如果当前工作目录是1 ,则可以使用cd命令移动到两个三个或任何位置:


   
   
$ pwd
one
$ cd two / three
$ pwd
three

您可以使用pushd进行相同操作:


   
   
$ pwd
one
$ pushd two / three
~ / one / two / three ~ / one
$ pwd
three

pushed的最终结果与cd相同,但还有一个中间结果: pushed回显您的目标目录和原始点。 这是您的目录堆栈 ,这是使push唯一的原因。

堆栈

用计算机术语来说,堆栈是指元素的集合。 在此命令的上下文中,元素是您最近使用pushd命令访问的目录。 您可以将其视为历史或痕迹。

您可以通过push来移动整个文件系统; 每次,您以前的位置和新的位置都会添加到堆栈中:


   
   
$ pushd four
~ / one / two / three / four ~ / one / two / three ~ / one
$ pushd five
~ / one / two / three / four / five ~ / one / two / three / four ~ / one / two / three ~ / one

建立堆栈后,就可以将其用作书签或快速移动航路点的集合。 例如,假设在会话期间您在本示例的〜/ one / two / two / three / four / 5目录结构中进行了大量工作。 您知道您最近来过一次 ,但是您不记得它在推送堆栈中的位置。 您可以使用+0 (是加号,后跟零)参数查看堆栈,该参数告诉pushed不要更改到堆栈中的任何目录,但还会提示pushed回显当前堆栈:


   
   
$ pushd + 0
~ / one / two / three / four ~ / one / two / three ~ / one ~ / one / two / three / four / five

另外,您可以使用dirs命令查看堆栈,并可以使用-v选项查看每个目录的索引号:


   
   
$ dirs -v
0  ~ / one / two / three / four
1  ~ / one / two / three
2  ~ / one
3  ~ / one / two / three / four / five

堆栈中的第一个条目是您的当前位置。 您可以像往常一样使用pwd确认这一点:


   
   
$ pwd
~ / one / two / three / four

从0(您当前的位置和堆栈的第一个条目)开始,堆栈中的第二个元素是〜/ one ,这是您想要的目的地。 您可以使用+2选项在堆栈中前进:


   
   
$ pushd + 2
~ / one ~ / one / two / three / four / five ~ / one / two / three / four ~ / one / two / three
$ pwd
~ / one

这会将您的工作目录更改为〜/ one,并且还移动了堆栈,以便您的新位置位于最前面。

您还可以在堆栈中向后移动。 例如,要快速达到示例输出的〜/ one / two / 3 ,您可以向后移动一位,并记住push以0开头:


   
   
$ pushd -0
~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

添加到堆栈

您可以继续以这种方式浏览堆栈,并且它将仍然是您最近访问的目录的静态列表。 如果要添加目录,只需提供目录的路径。 如果目录是堆栈中的新目录,则会按照您的期望将其添加到列表中:


   
   
$ pushd / tmp
/ tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

但是,如果它已经存在于堆栈中,则会第二次添加:


   
   
$ pushd ~ / one
~ / one / tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

尽管堆栈通常用作您要快速访问的目录的列表,但它确实是您去过的地方的真实历史记录。 如果不想将目录多余地添加到堆栈中,则必须使用+ N-N表示法。

从堆栈中删除目录

显然,您的堆栈不是一成不变的。 您可以通过推入添加到其中,也可以通过popd从其中删除项目。

举例来说,假设你刚刚使用PUSHD添加〜/一到你的筹码,使得〜/一个当前工作目录。 要删除第一个(如果愿意,可以选择“ zeroeth”):


   
   
$ pwd
~ / one
$ popd + 0
/ tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four
$ pwd
~ / one

当然,您可以删除任何元素,从0开始计数:


   
   
$ pwd ~ / one
$ popd + 2
/ tmp ~ / one / two / three ~ / one / two / three / four / five ~ / one / two / three / four
$ pwd ~ / one

您还可以使用堆栈背面的popd ,再次从0开始。例如,从堆栈中删除最终目录:


   
   
$ popd -0
/ tmp ~ / one / two / three ~ / one / two / three / four / five

像这样使用时, popd不会更改您的工作目录。 它只会操纵您的堆栈。

没有给出任何参数的popd的默认行为是从堆栈中删除第一个(zeroeth)项目,并将下一个项目作为当前工作目录。

例如,当您在两个不同的目录中工作并且只需要暂时离开一些其他位置时,这作为快速更改命令最有用。 如果不需要详细的历史记录,则不必考虑目录堆栈:


   
   
$ pwd
~ / one
$ pushd ~ / one / two / three / four / five
$ popd
$ pwd
~ / one

您也不需要快速连续使用推入式弹出式 。 如果您使用push来访问其他位置,然后因追踪错误或进行研究而分心了三个小时,那么您会发现目录堆栈耐心等待(除非您已结束终端会话):


   
   
$ pwd ~ / one
$ pushd / tmp
$ cd { / etc, / var, / usr } ; sleep 2001
[ ... ]
$ popd
$ pwd
~ / one

在现实世界中被推挤

pushpopd命令非常有用。 学习它们之后,您会发现充分利用它们的借口,并且您将熟悉目录堆栈的概念。 熟悉推入是帮助我理解git stash的原因 ,它与推入完全无关,但在概念上无形上相似。

在shell脚本中使用pushpopd可能很诱人,但是通常最好避免使用它们。 它们在Bash和Zsh之外不可移植,当您重新阅读脚本时它们会变得钝( 推+3的清晰度不如cd $ HOME / $ DIR / $ TMP或类似名称)。

除了这些警告之外,如果您是常规的Bash或Zsh用户,则可以并且应该尝试pushpopd

翻译自: https://opensource.com/article/19/8/navigating-bash-shell-pushd-popd

shell popd

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值