为了方便用户在不同目录之间切换,Bash 提供了目录堆栈功能。
cd -
- Bash 可以记忆用户进入过的目录。默认情况下,只记忆前一次所在的目录,
cd -
命令可以返回前一次的目录。# 当前目录是 /path/to/foo $ cd bar # 重新回到 /path/to/foo $ cd -
- 上面例子中,用户原来所在的目录是
/path/to/foo
,进入子目录bar
以后,使用cd -
可以回到原来的目录。
pushd,popd
- 如果希望记忆多重目录,可以使用
pushd
命令和popd
命令。它们用来操作目录堆栈。 pushd
命令的用法类似cd
命令,可以进入指定的目录。$ pushd dirname
- 上面命令会进入目录
dirname
,并将该目录放入堆栈。 - 第一次使用
pushd
命令时,会将当前目录先放入堆栈,然后将所要进入的目录也放入堆栈,位置在前一个记录的上方。以后每次使用pushd
命令,都会将所要进入的目录,放在堆栈的顶部。 popd
命令不带有参数时,会移除堆栈的顶部记录,并进入新的堆栈顶部目录(即原来的第二条目录)。- 下面是一个例子。
# 当前处在主目录,堆栈为空 $ pwd /home/me # 进入 /home/me/foo # 当前堆栈为 /home/me/foo /home/me $ pushd ~/foo # 进入 /etc # 当前堆栈为 /etc /home/me/foo /home/me $ pushd /etc # 进入 /home/me/foo # 当前堆栈为 /home/me/foo /home/me $ popd # 进入 /home/me # 当前堆栈为 /home/me $ popd # 目录不变,当前堆栈为空 $ popd
- 这两个命令的参数如下。
(1)-n 参数
-n
的参数表示仅操作堆栈,不改变目录。$ popd -n
- 上面的命令仅删除堆栈顶部的记录,不改变目录,执行完成后还停留在当前目录。
(2)整数参数
- 这两个命令还可以接受一个整数作为参数,该整数表示堆栈中指定位置的记录(从0开始),作为操作对象。这时不会切换目录。
# 从栈顶算起的3号目录(从0开始),移动到栈顶 $ pushd +3 # 从栈底算起的3号目录(从0开始),移动到栈顶 $ pushd -3 # 删除从栈顶算起的3号目录(从0开始) $ popd +3 # 删除从栈底算起的3号目录(从0开始) $ popd -3
- 上面例子的整数编号都是从0开始计算,
popd +0
是删除第一个目录,popd +1
是删除第二个,popd -0
是删除最后一个目录,,popd -1
是删除倒数第二个。
(3)目录参数
pushd
可以接受一个目录作为参数,表示将该目录放到堆栈顶部,并进入该目录。$ pushd dir
popd
没有这个参数。
dirs 命令
dirs
命令可以显示目录堆栈的内容,一般用来查看pushd
和popd
操作后的结果。$ dirs
- 它有以下参数。
-c
:清空目录栈。-l
:用户主目录不显示波浪号前缀,而打印完整的目录。-p
:每行一个条目打印目录栈,默认是打印在一行。-v
:每行一个条目,每个条目之前显示位置编号(从0开始)。+N
:N
为整数,表示显示堆顶算起的第 N 个目录,从零开始。-N
:N
为整数,表示显示堆底算起的第 N 个目录,从零开始。
下一节:脚本(script)就是包含一系列命令的一个文本文件。Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。
脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚本。