我在运行 Android-Studio 中的 aapt、通过 playonlinux 运行 wine(还没有尝试过普通的 wine)或尝试安装 steam 时遇到了一些类似的错误。也许其他程序也会出现这种情况,但我还没有测试过所有程序。
经过一番谷歌搜索后,我还没有找到可行的解决方案。
以下是 Android-Studio 中 aapt 的一个示例:
AAPT err(Facade for 1508687752): /home/xxx/Android/Sdk/build-tools/23.0.2/aapt: 2: /home/xxx/Android/Sdk/build-tools/23.0.2/aapt: Syntax error: newline unexpected (expecting ")")
wine 和 steam 中的错误类似,总是语法错误,并且期望“)”或“(”是意外的。
我还用脚本测试了它:
#!/bin/bash
echo 'test'
array=(1 2 3 4 5)
echo ${array[*]}
使用 sh 运行时,会出现同样的错误。使用 bash 或“./”运行时,运行正常。
造成该问题的原因是什么?我该如何解决它?
答案1
好吧,很多人不知道这一点,但默认情况下,Ubuntu 链接/bin/sh
到dash
,而不是bash
。您可以使用以下命令检查这一点:
ls -l /bin/sh
shelldash
不支持数组,正如bash
解释的那样这里。
你可以检查当前打开了哪个 shell:
echo "$SHELL"
话虽如此,预打包的程序遇到这个错误还是很奇怪的。我希望它们#!/bin/bash
在需要时已经启动了。
您可以编辑有问题的脚本以将其包含#!/bin/bash
在顶部。
如果脚本没有“shebang”行(#!
顶部的和等),则当前 shell 是执行的默认 shell 。您可以在出现提示时使用,然后输入密码来./
更改登录 shell 。您必须重新登录。chsh
/bin/bash
如果这没有帮助,您还可以更改符号链接(这可能不会破坏任何东西,但 YMMV):
sudo rm /bin/sh
sudo ln -s bash /bin/sh