在 Bash 脚本中,pushd
和 popd
是非常实用的目录栈操作命令,它们比单纯的 cd
命令更强大,适合在脚本中频繁切换目录但又需要“返回原处”的场景。
pushd
命令
作用:
将当前目录压入栈中,然后切换到指定目录。
语法:
pushd <目标目录>
例子:
pwd # /home/user
pushd /tmp
pwd # /tmp
此时目录栈长这样(从栈顶到栈底):
/tmp
/home/user
popd
命令
作用:
将栈顶的目录弹出,并切换回上一个目录。
语法:
popd
例子:
popd
pwd # /home/user
pushd
/ popd
组合使用的典型场景
#!/bin/bash
set -e
echo "当前目录: $(pwd)"
pushd /tmp > /dev/null # 切换到 /tmp,压入当前目录栈,并静音输出
echo "进入目录: $(pwd)"
# 做点事情,比如创建文件
touch testfile
popd > /dev/null # 返回原目录,并静音输出
echo "返回目录: $(pwd)"
输出示例:
当前目录: /home/user
进入目录: /tmp
返回目录: /home/user
优势
特性 | pushd/popd | cd |
---|---|---|
保存目录历史 | ✅ | ❌ |
可轻松返回上级 | ✅ | ❌ |
多层嵌套操作 | ✅ | ❌ |
栈结构支持 | ✅ | ❌ |
查看目录栈:dirs
你可以使用:
dirs
来查看当前目录栈的内容。
小技巧
如果你想默认在 shell 中启用 pushd
替代 cd
,可以在你的 .bashrc
中添加:
alias cd='pushd'
总结
命令 | 用途 |
---|---|
pushd | 保存当前路径,进入新目录 |
popd | 返回之前保存的路径 |
dirs | 查看当前路径栈 |
pushd/popd
非常适合写结构复杂的 bash 脚本,可以让目录切换逻辑更清晰、可控。你要写的脚本里如果涉及“去别处做事,再回来”,强烈推荐用它们。