You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中切换目录及返回原目录的实现方法咨询

Shell脚本中切换目录及返回原目录的实现方法咨询

问题背景

我现在在使用md-to-pdf的命令行工具,发现一个问题——如果MD文件里的PNG图片链接指向的不是当前运行md-to-pdf命令所在目录下的图片,生成的PDF里图片链接就会失效。但如果我在同时包含PNG和MD文件的目录里运行命令,生成的PDF就能正确嵌入图片。

作为临时解决办法,我想在shell脚本(这是pre-commit hook的一部分)运行时切换到包含PNG和MD文件的目录。我的脚本是在home/user/repo/目录下运行的,该怎么切换到repo/docs/diagrams/<directoryWithPNG&MDs>呢?另外,切换之后能不能回到原来的目录?我刚接触shell脚本,不太熟悉,麻烦大家帮忙解答下!


解决方案

1. 切换到目标目录的方法

你可以通过相对路径或绝对路径两种方式切换目录:

  • 相对路径(适合脚本固定在home/user/repo/目录运行的场景):
    cd docs/diagrams/<directoryWithPNG&MDs>
    
  • 绝对路径(更稳妥,避免当前目录意外变化导致路径错误):
    cd /home/user/repo/docs/diagrams/<directoryWithPNG&MDs>
    

2. 切换回原目录的两种实用方法

方法一:用pushd和popd(最省心的方式)

这两个命令是专门用来管理目录栈的,pushd会把当前目录存入栈中并切换到目标目录,popd则会从栈中恢复上一个目录:

# 保存当前目录并切换到目标目录
pushd docs/diagrams/<directoryWithPNG&MDs>

# 在这里执行你的md-to-pdf命令
md-to-pdf your-target-file.md

# 切换回最初的目录
popd
方法二:保存原目录路径,手动切换回去

先把初始目录的路径存入变量,完成操作后再切回去,适合需要灵活使用原目录路径的场景:

# 保存当前目录到变量
original_dir=$(pwd)

# 切换到目标目录
cd docs/diagrams/<directoryWithPNG&MDs>

# 执行md-to-pdf命令
md-to-pdf your-target-file.md

# 切换回原目录(注意变量要加双引号,避免路径含空格等特殊字符出错)
cd "$original_dir"

额外提示

在pre-commit hook中使用这些方法时,两种方式都能保证操作完成后回到初始目录,不会影响后续钩子的执行逻辑。

备注:内容来源于stack exchange,提问作者nlecce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:17:55