我想在终端应用程序中的“bq Aquaris E4.5 Ubuntu-Edition”手机上运行一个 shell 脚本,并在 /home/phablet/Documents/sync.sh 中创建一个 shell 脚本
#!/bin/sh
# sync contacts and calendar with OwnCloud
syncevolution owncloud calendar-defaultcalendar
syncevolution --sync slow owncloud contacts
exit 0
该脚本可执行但返回:
bash: ./sync.sh: /bin/sh: bad interpreter : Permission denied
我不确定 Ubuntu-touch 上运行什么解释器(bash、sh、??),也不确定默认用户有什么权限。
那么,到底是什么问题或者缺失了什么呢?
答案1
答案2
无论它是什么(一个错误或一个奇怪的配置):
./yourscript.sh
在 Ubuntu-touch 上不起作用。解决方法是:
bash yourscript.sh
答案3
经过一些(初步)测试后,我发现这不是 ubuntu-terminal-app 的错误,而是与不允许从主目录中启动可执行文件有关。这就是为什么可以bash /path/to/file
工作,但/path/to/file
不能,因为 bash 驻留在 中/bin
。
我尝试运行一个 bash 脚本、一个 python 脚本和一个 hello-world g++ 编译的 c++ 程序,所有脚本都设置了可执行位,但在 的子目录中,没有一个脚本可以运行/home
。没有一个脚本可以运行,而 root 的其他子目录中的脚本和应用程序可以正常运行。
不幸的是,我还没有找到解决方案:没有任何内容/etc/fstab
建议/home
安装为noexec
:
/userdata/user-data /home none bind 0 0
我甚至尝试过将其重新安装,但exec
无济于事mount -o remount,rw,exec /home
。如果我找到解决方案,我会更新。
到目前为止,唯一的解决方法是使用解释器运行脚本(Bash/Python 等)或/lib/ld-linux-armhf.so.3 /path/to/file
二进制应用程序。
小更新:一个稍微优雅的解决方法是将脚本/应用程序移动到另一个目录,例如/opt
,然后符号链接到它。这样你就可以通过运行它了/path/to/symlink
。例如,你可以这样做:
sudo mv /path/to/SCRIPT.sh /opt
ln -s /opt/SCRIPT.sh /path/to
然后您只需输入即可/path/to/SCRIPT.sh
运行它。
更新解决方案
发现问题与终端应用程序的 apparmor 安全配置文件有关。请在此处查看我的问题和答案:Ubuntu touch – 可执行文件无法在 /home 目录中启动
答案4
尝试将 shabang 行更改为
#!/bin/bash
而不是
#!/bin/sh
这将默认将解释器设置为 bash,而不是 sh。这样应该更简单。