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

Bash技巧:当前文件路径存变量与跨平台设置项目根目录环境变量

问题解答

1. 在Bash Shell中把当前文件路径存为变量

想拿到当前正在运行的脚本文件的路径?别用$PWD——那是你当前终端的工作目录,不是脚本所在的位置。推荐用${BASH_SOURCE[0]},它比$0更靠谱(尤其是当脚本被source执行时,$0会指向bash进程,而${BASH_SOURCE[0]}始终指向脚本文件)。

这里给你两种常用的场景:

  • 获取脚本的绝对路径:
    # 用readlink转成绝对路径,大部分Linux系统都支持
    CURRENT_SCRIPT=$(readlink -f "${BASH_SOURCE[0]}")
    # 如果你的系统没有readlink,试试realpath(部分发行版默认自带)
    # CURRENT_SCRIPT=$(realpath "${BASH_SOURCE[0]}")
    
  • 获取脚本所在的目录:
    # 先拿到脚本绝对路径,再取父目录
    CURRENT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
    

2. 设置与平台/名称无关的PROJECT_DIR

你说用$PWD有问题,太正常了——$PWD是你打开终端时的工作目录,根本不是environment_variables文件所在的项目根目录!正确的做法是从environment_variables文件本身的位置来推导项目根目录,不管项目移到哪、叫什么名都能自动适配。

你可以直接在environment_variables文件里添加这段代码:

# 拿到当前environment_variables文件的绝对路径,再取父目录就是项目根
PROJECT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")

然后在bashrc里正常加载这个文件就行:

source /path/to/your/project/environment_variables

这样不管你把项目挪到新路径,或者在任意目录打开终端,PROJECT_DIR都会精准指向项目根目录——因为它是从environment_variables文件的位置动态计算出来的,完全和平台、项目名称无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:39:03