Opensuse 13.1 build / envsetup.sh:意外标记'$'{\ r''附近的语法错误

时间:2015-02-02 20:07:47

标签: android bash shell android-source opensuse

我正在开发android开源项目。我从android.googlesource.com下载了最新版本。

现在,git存储库同步已完成。但是,当我尝试设置编译android源代码的环境时,命令:source 'build/envsetup.sh' 抛出这个错误:

bash:build / envsetup.sh:第1行:意外令牌$'{\r'' 'ash: build/envsetup.sh: line 1:附近的语法错误hmm(){

我尝试过在线解决方案,但没有成功。如果有人知道如何修复此错误,那将会有所帮助。

2 个答案:

答案 0 :(得分:2)

编辑:问题的根本原因是由于Git autocrlf设置为true。在Linux下,它应设置为input

git config --global core.autocrlf input

(原始答案)

问题来自Windows行尾(EOL),因此您必须通过dos2unix(在Ubuntu上运行apt-get install dos2unix)将所有脚本转换为unix样式的EOL,然后转换你的脚本:

dos2unix build/envsetup.sh sdk/bash_completion/adb.bash

然后所有vendorsetup.sh(这将阻止找不到"命令"你得到错误):

find device/ -name vendorsetup.sh -exec dos2unix {} \;

最后一个运行choosecombo脚本:

dos2unix build/core/find-jdk-tools-jar.sh

编辑:为了完成整体编译,详尽的转换:

find . -name '*.sh' -exec dos2unix {} \;
find . -name '*.py' -exec dos2unix {} \;
find . -name '*.c' -exec dos2unix {} \;
find . -name '*.h' -exec dos2unix {} \;
find . -name '*.cpp' -exec dos2unix {} \;
find . -name '*.hpp' -exec dos2unix {} \;
find . -name '*.txt' -exec dos2unix {} \;
find . -name 'Config.in' -exec dos2unix {} \;
find . -name 'Config.src' -exec dos2unix {} \;
find . -name 'Makefile' -exec dos2unix {} \;
find . -name 'mkmakefile' -exec dos2unix {} \;
find . -name 'Kconfig*' -exec dos2unix {} \;
find . -name rmtypedefs -exec dos2unix {} \;
find . -name apicheck -exec dos2unix {} \;
find . -name seapp_contexts -exec dos2unix {} \;
dos2unix external/busybox/scripts/* external/busybox/applets/* kernel/scripts/* dalvik/dx/etc/* prebuilts/sdk/tools/*

所有shell脚本的*.sh和所有python脚本的*.py(在make编译期间使用),以及.c.cpp文件(显然)和makefile使用的其他文件。

当然,您可以过度使用find . -type f -exec dos2unix -s -k -o {} \;并让dos2unix决定哪些文件是文本,哪些文件是二进制文件。

可能还有其他的。当我找到新答案时,我会编辑这个答案......

答案 1 :(得分:0)

将example.sh文件转换为unix的简便方法是使用NotePad ++(编辑> EOL转换> UNIX / OSX格式)

您还可以在记事本++中设置默认EOL(设置>偏好设置>新文档/默认目录>在格式框下选择Unix / OSX)

参考 - syntax error near unexpected token `$'in\r''

它也解决了这个问题:android_build.sh gives error while building ffmpeg library

我用过这个。它早些解决了我的问题。