如何在 Ubuntu-touch 上运行 shell 脚本?

如何在 Ubuntu-touch 上运行 shell 脚本?

我想在终端应用程序中的“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

好像ubuntu-terminal-app 中的一个错误

该错误描述提到了一种解决方法:

当我使用时它似乎有效bash ./testscript

./可选的

答案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。这样应该更简单。

相关内容