Bash脚本中tee -a命令未向~/.bash_profile追加内容问题求助
问题根因
Bash 的波浪号(~)扩展仅在波浪号未被引号包裹时生效。你调用insertIntoFile函数时,将~/.bash_profile整体用双引号包裹,导致 shell 不会将~解析为当前用户的主目录,而是将其作为普通字面字符处理。脚本实际尝试写入的是当前工作目录下名为~的子目录中的.bash_profile文件,而非你预期的用户主目录下的.bash_profile,因此你查看目标文件时看不到追加的内容。你可以在脚本执行的工作目录下执行ls -la,大概率可以找到名为~的目录或文件,你写入的内容实际存储在该路径下。
修复方案
两种可任选的修复方式:
- 方式一:将波浪号移出引号范围,保证波浪号可以正常触发扩展
修改函数调用代码为:
insertIntoFile "export/ foo=bar" ~/.bash_profile
也可以仅将波浪号部分单独移出引号:
insertIntoFile "export/ foo=bar" ~"/.bash_profile"
- 方式二:用
$HOME环境变量替代波浪号,$HOME在引号内部也可以正常扩展
修改函数调用代码为:
insertIntoFile "export/ foo=bar" "$HOME/.bash_profile"
验证方法
修改完成后重新执行bash -x ./updateFile.sh,观察调试输出中tee的参数,如果参数显示为/home/你的用户名/.bash_profile(Linux 环境)或/Users/你的用户名/.bash_profile(macOS 环境),说明路径扩展正常,内容会正确写入目标文件。
内容的提问来源于stack exchange,提问作者lilHar
相关产品推荐
相关产品推荐

