Bash脚本sed修改文件正常 运行setup.sh报文件不存在错误
问题根因
报错不是你写的配置修改脚本抛出的,来源是被调用的/setup_script/setup.sh,具体原因:
- 你编写的外层脚本操作配置文件用的是绝对路径
/config/input.env,路径解析不依赖执行时的工作目录,所以前面三次sed修改配置的操作都能正常生效,这部分逻辑没有问题。 - 报错里访问文件用的是相对路径
../config/input.env,Bash 里相对路径的解析基准是执行命令时的当前工作目录,不是脚本文件自身的存放位置:- setup.sh的编写逻辑默认假设自己在
/setup_script目录下被执行:这种场景下../config/input.env向上一级跳转后刚好对应/config/input.env,路径是正确的。 - 你当前调用setup.sh的命令是
sudo bash /setup_script/setup.sh,执行时的工作目录是你运行外层脚本时所在的目录,不是/setup_script;再加上sudo默认会重置执行环境,把工作目录切换到root用户的家目录(一般为/root),此时从当前工作目录解析../config/input.env根本找不到对应文件,就会触发找不到文件的报错。
- setup.sh的编写逻辑默认假设自己在
修复方法
任选一种即可解决:
- 调用setup.sh前先切换到脚本所在目录:
cd /setup_script sudo bash ./setup.sh
- 在setup.sh开头添加一行命令,强制脚本运行时先切换到自身文件所在目录,后续相对路径就会按预期解析:
cd "$(dirname "$0")"
内容的提问来源于stack exchange,提问作者KBNanda
相关产品推荐
相关产品推荐

