简短的问题 - 在linux中,每当我们收到以下错误 “语法错误:单词意外(期待”)“)” ,它通常意味着什么?
详细问题 - 我一直在尝试按照Ubuntu 10.04上的Sourcery工具链交叉编译Qt-4.6。我按照链接compiling Qt-4.6中提到的确切步骤进行操作。但是我在./configure步骤中得到了以下错误 -
/home/weds/qt-everywhere-opensource-src-4.6.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
在互联网上搜索我发现了很多有关此错误的帖子。阅读所有这些内容。但仍然无法知道这个错误是什么以及如何解决它。如果有人帮助我理解这个错误,我会很高兴。
P.S 1 - Sourcery工具链出现在/ opt /文件夹中,我的PATH变量正确指向它。 P.S 2 - 此工具链未由我手动安装。相反,它是由供应商提供的.tgz文件,我在/ opt /文件夹中提取。
答案 0 :(得分:8)
这是Almquist shell或其任何衍生产品(例如dash
(和dash
碰巧是Ubuntu 10.04上/bin/sh
的默认实现)报告的错误在解析期望)
的脚本的语法时找到单词,例如在这种情况下声明:
$ dash -c 'case a in b c) :; esac'
dash: 1: Syntax error: word unexpected (expecting ")")
那是因为在b
之后,唯一预期的是)
,(虽然实际上|
也是允许的),因此c
字是意料之外的。
$ dash -c 'myfunc( something'
dash: 1: Syntax error: word unexpected (expecting ")")
可能发生这种情况的一种情况是,脚本是通过Microsoft OS写入或传输的,其中文本行结尾是CRLF而不是LF。
A
case a in b) cmd1;;
c) cmd2
esac
在MS-DOS上编写的脚本将显示为:
case a in b) cmd1;;<CR>
c) cmd2<CR>
esac<CR>
在Unix上,c
在<CR>
字后面是一个额外的字。
此处不太可能,因为您的错误报告问题出现在脚本的第一行,大多数脚本都以#! /path/to/interpreter
she-bang行开头。
另一种可能性是,您尝试运行的脚本是基于sh
为bash
的假设编写的,并使用了不可移植到其他sh
实现的构造。< / p>
由于您使用的是过时且不再维护的操作系统,因此您可能遇到该版本dash
中的错误。您可以运行dpkg-reconfigure dash
并告诉系统不要将dash
用于sh
(而是使用bash
)以查看是否有帮助。
再次不太可能出现在第一行。
更有可能的是,qmake
文件不是脚本,而是系统无法识别的二进制可执行文件,例如因为它是错误体系结构的二进制格式或者它转移已被破坏。
在这种情况下,当系统无法将其识别为本机可执行文件时,调用应用程序将尝试在其上运行sh
,就像它是一个shell脚本一样,并且存在{{1}文件中的字符可能导致(
失败并出现此类错误。
在我的系统上:
dash
如果您查看$ dash /bin/touch
/bin/touch: 1: /bin/touch: Syntax error: word unexpected (expecting ")")
的内容,就好像它是一个脚本,您会看到:
/bin/touch
答案 1 :(得分:2)
对此的回答似乎发布在您链接的说明中。
不可否认,这是一个long way down in the comments,但搜索^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@5&@^@^@^@^@^@@^@^@^@^@^@^@^@(ô^@^@...
并不需要很长时间。
引用:
Tej说:2013年1月4日下午12:20
好的,我已经解决了这个问题。非常不幸的是,人们没有 告诉实际上是什么问题。问题是我们必须使用Host QMAKE。无论出口什么(出口 PATH = / usr / local / arm / 4.3.2 / bin:$ PATH等)我们在tslib期间执行了 安装,我们必须撤消所有这些。多数民众赞成。
希望能帮到某人
如果不清楚, Tej 表明您似乎正在尝试在主机系统上运行交叉编译的qmake: Syntax error: word unexpected
。
答案 2 :(得分:1)
99%这是一个错误的文件传输/ ascii /二进制模式
尝试直接在目标系统上提取工具链
答案 3 :(得分:0)
出现此问题时,我正在Ubuntu 18.04上编写C ++程序。原因是程序的文件名包含字符“(”和“)”。重命名文件后,它对我有用。
答案 4 :(得分:0)
对我来说奇怪的修复是删除 package-lock.json 和 node_modules 文件夹,然后再次构建 docker 镜像