一、目录栈指令


目录栈是用户最近访问过的系统目录列表,并以堆栈的形式管理。栈中的内容与Shell环境变量DIRSTACK的值对应


1、dirs


1)功能

显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录)


2)语法

(1)格式:dirs  [-clpv]  [+n]  [-n]

(2)选项

-c    删除目录栈中的所有记录

-l     以完整格式显示

-p    一个目录一行的方式显示

-v    每行一个目录来显示目录栈的内容,每个目录前加上的编号

+N  显示从左到右的第n个目录,数字从0开始

-N   显示从右到左的第n个日录,数字从0开始

注意:dirs始终显示当然目录, 再是堆栈中的内容;即使目录堆栈为空, dirs命令仍然只显示当然目录


2、pushd

1)功能

pushd命令常用于将目录加入到栈中,加入记录到目录栈顶部,并切换到该目录;若pushd命令不加任何参数,则会将位于记录栈最上面的2个目录对换位置


2)语法

(1)格式:pushd  [目录 | -N | +N]   [-n]

(2)选项

目录   将该目录加入到栈顶,并执行"cd 目录",切换到该目录

+N   将第N个目录移至栈顶(从左边数起,数字从0开始)

-N    将第N个目录移至栈顶(从右边数起,数字从0开始)

-n    将目录入栈时,不切换目录


3、popd


1)功能

popd用于删除目录栈中的记录;如果popd命令不加任何参数,则会先删除目录栈最上面的记录,然后切换到删除过后的目录栈中的最上面的目录


2)语法

(1)格式:pushd  [-N | +N]   [-n]

(2)选项

+N   将第N个目录删除(从左边数起,数字从0开始)

-N    将第N个目录删除(从右边数起,数字从0开始)

-n    将目录出栈时,不切换目录


二、 相关实例


实例一:入栈与出栈

root@Mylinux:~# mkdir /tmp/dir{1,2,3,4}

root@Mylinux:~# for ((i=1;i<=4;i++))

> do

>   pushd /tmp/dir${i}

> done

/tmp/dir1 ~

/tmp/dir2 /tmp/dir1 ~

/tmp/dir3 /tmp/dir2 /tmp/dir1 ~

/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~

root@Mylinux:/tmp/dir4# dirs

/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~


root@Mylinux:/tmp/dir4# popd(相当于popd +0)

/tmp/dir3 /tmp/dir2 /tmp/dir1 ~


root@Mylinux:/tmp/dir3# pushd /tmp/dir4

/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~


root@Mylinux:/tmp/dir4# popd +1

/tmp/dir4 /tmp/dir2 /tmp/dir1 ~


root@Mylinux:/tmp/dir4# popd -2

/tmp/dir4 /tmp/dir1 ~


root@Mylinux:/tmp/dir4# pushd /tmp/dir3

/tmp/dir3 /tmp/dir4 /tmp/dir1 ~


root@Mylinux:/tmp/dir3# pushd /tmp/dir2

/tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1 ~


root@Mylinux:/tmp/dir2# pushd -1

/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4
注意:最左边表示栈顶,最右边表示栈底


实例二:清空栈

root@Mylinux:~# dirs

~ /tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1

root@Mylinux:~# dirs -c

root@Mylinux:~# dirs

~


实例三:列表形式显示的栈的内容

root@Mylinux:/tmp/dir4# dirs -l -v

0  /tmp/dir4

1  /tmp/dir3

2  /tmp/dir2

3  /tmp/dir1

4  /root