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

如何让Bash脚本无需指定绝对路径即可读取关联文件?

解决脚本绝对路径执行时找不到同目录文件的问题

问题根源是:当用绝对路径执行脚本时,脚本的当前工作目录不是脚本所在的目录,而是执行命令时的当前目录,所以./sources.txt会指向执行命令时的目录,而非脚本所在目录。

以下是两种可靠的解决方法:

方法1:先切换到脚本所在目录再执行操作

修改script.sh,在开头添加切换目录的代码:

#!/bin/bash
# 获取脚本所在的绝对目录
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 切换到该目录,失败则直接退出
cd "$DIR" || exit 1

sed -i 's/\r//g' ./sources.txt

while read -r source
do
    echo "$source"
done < ./sources.txt

方法2:直接构造源文件的绝对路径

不需要切换目录,直接用脚本所在目录拼接源文件路径:

#!/bin/bash
# 获取脚本所在的绝对目录
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 构造sources.txt的绝对路径
SOURCE_FILE="$DIR/sources.txt"

sed -i 's/\r//g' "$SOURCE_FILE"

while read -r source
do
    echo "$source"
done < "$SOURCE_FILE"

补充说明

  • ${BASH_SOURCE[0]}会获取当前脚本的路径(无论用相对还是绝对路径执行),dirname提取目录部分,cd加pwd确保得到绝对路径。
  • &>/dev/null用来屏蔽cd命令可能产生的错误输出,避免干扰脚本运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:05:21