【问题标题】:Opensuse 13.1 build/envsetup.sh: syntax error near unexpected token `$'{\r''Opensuse 13.1 build/envsetup.sh:意外标记 `$'{\r'' 附近的语法错误
【发布时间】:2015-04-01 21:04:03
【问题描述】:

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

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

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

我尝试了可用的在线解决方案,但没有成功。如果有人知道如何修复此错误,那将很有帮助。

【问题讨论】:

  • 我已尝试遵循您链接中的指南。我希望它现在有助于理解这个问题。
  • 看起来 MS WIndows 参与了创建现在在 Linux 环境中使用的文件。 (\r)..dos2unix file1 file2 file3 file.... filen 一次转换/修复它们。祝你好运。

标签: android bash shell android-source opensuse


【解决方案1】:

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

你也可以在notepad++中设置默认EOL(设置>首选项>新建文档/默认目录>在格式框下选择Unix/OSX)

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

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

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

【讨论】:

    【解决方案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/*
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2012-08-31
      • 2012-10-20
      • 2012-09-29
      • 2013-12-11
      • 1970-01-01
      相关资源
      最近更新 更多