003_cd pushd popd三个命令的区别
一、
It depends. In zsh
you can configure cd
to push the old directory on the directory stack automatically, but it is not the default setting.
As far as I can tell zsh
with default settings behaves very similar to bash
:
cd somedir
- change directory to
somedir
- save the original directory in
OLDPWD
- set
PWD="somedir"
- replace top element of the directory stack (as shown by
dirs
) withsomedir
(the number of elements on the stack does not change).
- change directory to
cd -
:- change directory to
$OLDPWD
- swap values of
PWD
andOLDPWD
- modify the top element of the directory stack to reflect (the new)
PWD
- change directory to
pushd somedir
:- change directory to
somedir
- save original directory in
OLDPWD
- set
PWD="somedir"
- push
somedir
onto the directory stack (extending it by one element)
- change directory to
popd
:- save original directory in
OLDPWD
- remove first element of the directory stack
- change directory to the new top element of the directory stack
- set
PWD
to the new top element of the directory stack
- save original directory in
Note: Whether the present working directory is considered an element of the directory stack differs between zsh
and bash
. I used bash
as reference for the above lists.
In
bash
the present working directory is considered to be the top element of the directory stack. Theman 1 bash
says:pushd [-n] [dir]
[…] Adds
dir
to the directory stack at the top, making it the new current working directory as if it had been supplied as the argument to thecd
builtin. […]Printing
DIRSTACK
(echo ${dirstack[@]}
) confirms that the first element is identical to$PWD
.In
zsh
the present working directory is not part of the directory stack (but still shown withdirs
).man 1 zshbuiltins
says:pushd [ -qsLP ] [ arg ]
[…] Change the current directory, and push the old current directory onto the directory stack. In the first form, change the current directory to arg. […]
Printing
dirstack
(echo ${dirstack[@]}
) and comparing it to the output ofdirs
should show that thePWD
is not part of `dirstack.
In both shells dirs
prints the present working directory as the first element. Also in both shells, the directory stack element with the index 1
refers to the directory which was current before the last pushd
. That is because arrays in zsh
are usually numbered from 1
, while they are numbered from 0
in bash
. So there is little practical difference
As said above, this behavior can be modified in zsh
.
If you set the AUTO_PUSHD
option in zsh
(setopt autopushd
) cd somedir
behaves like pushd somedir
, the previous directory is pushed onto the directory stack automatically. This is probably the case on your machine. You can run setopt
to get a list of options that are not set the default way. See, whether autopushd
appears in the list.
But this does not modify cd -
to behave like popd
. Instead it just pushes $PWD
onto the directory stack, and changes directory to $OLDPWD
. That means repeatedly calling cd -
will actually grow the directory stack (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). If it actually does behave exactly like popd
on your system, I would suggest if cd
is actually the builtin (whence -v cd
); it is possible that its replaced with an alias or function.
As the directory stack will grow rather quickly with AUTO_PUSHD
enabled, you can limit its size by setting the parameter DIRSTACKSIZE
to the desired maximum size.
You can also prevent duplicates by setting the PUSHD_IGNORE_DUPS
option.
For more options have a look at the manual.
参考:https://unix.stackexchange.com/questions/272965/pushd-popd-vs-cd-cd-in-bash-and-zsh
003_cd pushd popd三个命令的区别的更多相关文章
- [转]Linux中set,env和export这三个命令的区别
转自:http://www.2cto.com/os/201306/223758.html Linux中set,env和export这三个命令的区别 set命令显示当前shell的变量,包括当前用户 ...
- 命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:
7.stat命令 stat命令用于查看文件的具体存储信息和时间等信息,格式为"stat 文件名称". stat命令可以用于查看文件的存储信息和时间等信息,命令stat anacon ...
- pushd,popd,dirs,cd -让切换目录更方便
与linux cd命令相似,用pushd实现在不同目录间切换 在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径 ...
- [转]Ubuntu中apt与apt-get命令的区别
转载于https://www.sysgeek.cn/apt-vs-apt-get/ Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入.其实早在 2014 年,apt 命令 ...
- apt与apt-get命令的区别与解释
[apt与apt-get命令的区别与解释] Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入.其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 20 ...
- Linux快速目录间切换cd pushd popd
1. cd - 当前目录和之前所在的目录之间的切换 2. cd + Alt . 用上次命令的最后一个目录路径 要用上上次命令的最后一个目录,就Alt+.两次就可以了 3. push ...
- apt与apt-get命令的区别
apt 和 apt-get的区别 Debian 作为 Ubuntu.Linux Mint 和 elementary OS 等 Linux 操作系统的母板,其具有强健的「包管理」系统,它的每个组件和应用 ...
- MVVM模式解析和在WPF中的实现(三)命令绑定
MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- Beta冲刺——day3
Beta冲刺--day3 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...
- QT试验(1)
今天,用Qt Creator写第一个简单的小程序“HelloQt”,运行时报错:error: cannot open C:\Users\敏\AppData\Local\Temp\main.obj.51 ...
- springMVC的接受参数三种样例
- cglib动态代理是通过继承父类的方式进行代理的 不是通过接口方式进行动态代理的 因此可以对普通的类进行代理
cglib动态代理是通过继承父类的方式进行代理的 不是通过接口方式进行动态代理的
- Java NIO 详解(一)
一.基本概念描述 1.1 I/O简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通 ...
- BZOJ4628 BJOI2016IP地址(trie)
离线,每次修改相当于对该规则的所有匹配点的值+1,考虑在trie上打加法标记和匹配标记,匹配标记不下传,加法标记下传遇到匹配标记时清空.注意是用b时刻前缀-a时刻前缀,而不是(a-1)时刻前缀,具体我 ...
- MT【195】三次函数
(2016年清华大学自主招生暨领军计划试题) 已知$x,y,z\in \mathbf{R}$,满足$x+y+z=1,x^2+y^2+z^2=1$,则下列结论正确的有( ) A.$xyz$的最大值为$0 ...
- 【刷题】BZOJ 2935 [Poi1999]原始生物
Description 原始生物的遗传密码是一个自然数的序列K=(a1,...,an).原始生物的特征是指在遗传密码中连续出现的数对(l,r),即存在自然数i使得l=ai且r=ai+1.在原始生物的遗 ...
- BZOJ 3624: [Apio2008]免费道路
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1201 Solved: ...
- 【BZOJ1432】[ZJOI2009]Function(找规律)
[BZOJ1432][ZJOI2009]Function(找规律) 题面 BZOJ 洛谷 题解 这...找找规律吧. #include<iostream> using namespace ...