Linux中pushd、popd和cd简析

cd

常用cd命令切换目录。

cd -命令回到之前的目录,-相当于$OLDPWD。cd -就相当于cd $OLDPWD

目录栈

linux目录栈顶端永远都存放着当前目录

kun@ubuntu:~/fluoride$ dirs 
~/fluoride

pushdpopd对一个目录栈进行操作,dirs显示目录栈的内容

dir选项含义
-p每行显示一条记录
-v每行显示一条记录,同时展示该记录在栈中的index
-c清空目录栈

pushd

用pushd切换目录时,将历史目录以栈结构的形式保存了下来。cd不会保存,仅替换栈顶

kun@ubuntu:~/fluoride$ pushd bluetooth/
~/fluoride/bluetooth ~/fluoride
kun@ubuntu:~/fluoride/bluetooth$ dirs -v
 0  ~/fluoride/bluetooth
 1  ~/fluoride
kun@ubuntu:~/fluoride/bluetooth$ cd ..
kun@ubuntu:~/fluoride$ dirs -v
 0  ~/fluoride
 1  ~/fluoride

pushd不带任何参数,将目录栈最顶层的两个目录进行交换。效果等于cd -,但目录栈的结果不同

kun@ubuntu:~/fluoride$ cd ..
kun@ubuntu:~$ dirs -v
 0  ~
 1  ~/fluoride
kun@ubuntu:~$ pushd
~/fluoride ~
kun@ubuntu:~/fluoride$ dirs -v
 0  ~/fluoride
 1  ~
kun@ubuntu:~/fluoride$ cd -
/home/kun
kun@ubuntu:~$ dirs -v
 0  ~
 1  ~

pushd +n切换到目录栈中的第n个目录(这里的n就是dirs -v命令展示的index),并将该目录以栈循环的方式推到栈顶。

kun@ubuntu:~/fluoride/bluetooth$ dirs -v
 0  ~/fluoride/bluetooth
 1  ~/fluoride
 2  ~
kun@ubuntu:~/fluoride/bluetooth$ pushd +2
~ ~/fluoride/bluetooth ~/fluoride
kun@ubuntu:~$ dirs -v
 0  ~
 1  ~/fluoride/bluetooth
 2  ~/fluoride

popd

popd不带参数,将目录栈中的栈顶元素出栈。这时,栈顶元素发生变化,自然当前目录也会发生相应的切换(接上文的执行现场)

kun@ubuntu:~$ dirs -v
 0  ~
 1  ~/fluoride
kun@ubuntu:~$ popd
~/fluoride
kun@ubuntu:~/fluoride$ dirs -v
 0  ~/fluoride

popd +n将目录栈中的第n个元素删除

kun@ubuntu:~$ dirs -v
 0  ~
 1  ~/fluoride/bluetooth
 2  ~/fluoride
kun@ubuntu:~$ popd +1
~ ~/fluoride
kun@ubuntu:~$ dirs -v
 0  ~
 1  ~/fluoride

pushd和popd的-n参数

上面我们用的都是+n作为参数,实际在使用pushd和popd的时候,有时候也会用到-n参数。两者的差别如下:+n的含义是从栈顶往栈底方向进行计数,从0开始;-n的含义刚好相反,从栈底向栈顶方向计数,从0开始。这样有点拗口,实际上,从默认的dirs命令(不带任何参数)的输出来解释最好理解了:+n是指从左往右数,-n是指从右往左数,都是从0开始。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值