Ubuntu 22.04中两种export执行方式为何结果不同?
问题分析与解决
直接在shell执行export WORKSPACE=$PWD和source export.txt的核心差异,大概率出在export.txt文件的格式问题上,具体原因和解决方法如下:
两种方式的本质区别
- 直接执行
export WORKSPACE=$PWD:命令在当前shell进程中实时执行,$PWD会被解析为当前shell的工作目录,变量WORKSPACE被正确导出到当前shell的环境变量池里,后续source buildsetup.sh时,脚本会直接继承当前shell的环境变量,自然能正常读取WORKSPACE。 source export.txt:本质是让当前shell执行export.txt里的每一行命令,但如果export.txt的格式有问题(最常见的是Windows风格的CRLF换行符),bash会把行尾的\r字符当成变量名的一部分,实际创建的是WORKSPACE\r这个变量(而非预期的WORKSPACE)。当buildsetup.sh尝试读取WORKSPACE时,自然会提示变量未定义。
验证与解决方法
- 检查文件格式
执行cat -A export.txt查看文件内容,如果每行结尾显示^M$,就说明是Windows换行符导致的问题(正常Unix文件结尾是$)。 - 转换文件格式
- 安装并使用
dos2unix工具:sudo apt install dos2unix dos2unix export.txt - 或者用sed命令手动去除行尾的
\r:sed -i 's/\r$//' export.txt
- 安装并使用
- 重新source测试
转换完成后,再执行source export.txt,接着运行echo $WORKSPACE确认变量是否正常输出,之后再执行source buildsetup.sh就能正常工作了。
内容的提问来源于stack exchange,提问作者Wei
相关产品推荐
相关产品推荐

