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

如何从根目录执行Bash脚本时使其如同在自身目录运行?

解决Bash脚本跨目录执行时找不到同目录依赖的问题

有几种可靠的方法能让你从根目录执行folder1/folder2/my-script.sh时,自动以folder2作为工作目录运行:

方法1:切换到脚本所在目录后执行

修改my-script.sh为以下内容:

#!/bin/bash
# 获取当前脚本所在的绝对路径
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 切换到脚本目录,切换失败则退出
cd "$SCRIPT_DIR" || exit 1
# 执行同目录下的脚本
./do-it.sh
  • ${BASH_SOURCE[0]}会返回当前脚本的实际路径(无论从哪里执行)
  • dirname提取路径中的目录部分,再通过cd+pwd得到绝对目录
  • cd "$SCRIPT_DIR" || exit 1确保如果目录切换失败(比如脚本被移动),脚本会立即退出,避免后续错误操作

方法2:直接用绝对路径调用依赖脚本

如果不需要切换工作目录,只是要正确找到do-it.sh,可以直接用脚本目录拼接路径:

#!/bin/bash
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 用绝对路径执行依赖脚本
"$SCRIPT_DIR/do-it.sh"

这种方法不会改变当前的工作目录(执行完脚本后你依然在根目录),适合只需要调用单个依赖脚本的场景。

不推荐的方法:写死绝对路径

虽然可以直接在脚本里写死do-it.sh的绝对路径:

#!/bin/bash
/folder1/folder2/do-it.sh

但这种方法灵活性极差,一旦脚本目录被移动,就需要手动修改路径,不适合需要移植的场景。


内容的提问来源于stack exchange,提问作者VeryNiceArgumentException

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:09:31