Je souhaite exécuter un script Shell sur mon téléphone "bq Aquaris E4.5 Ubuntu-Edition" dans l'application Terminal et créer un script Shell dans /home/phablet/Documents/sync.sh.
#!/bin/sh
# sync contacts and calendar with OwnCloud
syncevolution owncloud calendar-defaultcalendar
syncevolution --sync slow owncloud contacts
exit 0
Le script est exécutable mais renvoie:
bash: ./sync.sh: /bin/sh: bad interpreter : Permission denied
Je ne suis pas sûr de savoir quel interpréteur fonctionne sur Ubuntu-touch (bash, sh, ??) ni des droits de l'utilisateur par défaut.
Alors qu'est-ce qui ne va pas ou manque?
On dirait que n bogue dans l'application ubuntu-terminal .
La description du bogue mentionne une solution de contournement:
Cela semble fonctionner lorsque j'utilise
bash ./testscript
.
Le ./
est facultatif
Quoi que ce soit (un bug ou une configuration étrange):
./yourscript.sh
ne fonctionne pas sur Ubuntu-touch. La solution de contournement est la suivante:
bash yourscript.sh
Après quelques tests (préliminaires), il me semble que ce n'est pas un bogue avec l'application ubuntu-terminal, mais qu'il s'agit plutôt de ne pas être autorisé à lancer des fichiers exécutables à partir du répertoire de base. C'est pourquoi bash /path/to/file
a fonctionné, mais /path/to/file
n'a pas fonctionné, car bash réside dans /bin
.
J'ai essayé d'exécuter un script bash, un script python et un programme c ++ compilé hello-world compilé avec g ++, le tout avec le bit exécutable défini, et aucun ne sera exécuté dans un sous-répertoire de /home
. Aucun ne fonctionnera, tandis que les scripts et les applications des autres sous-répertoires de la racine fonctionneront parfaitement.
Malheureusement, je n'ai pas encore trouvé de solution: il n'y a rien dans /etc/fstab
qui suggère que /home
est monté comme noexec
:
/userdata/user-data /home none bind 0 0
J'ai même essayé de le remonter explicitement en tant que exec
en utilisant mount -o remount,rw,exec /home
en vain. Mettra à jour si je trouve une solution.
Jusqu'à présent, la seule solution consiste à utiliser un interpréteur pour exécuter des scripts (Bash/Python, etc.) ou /lib/ld-linux-armhf.so.3 /path/to/file
pour les applications binaires.
Mise à jour mineure: une solution de contournement légèrement plus élégante consiste à déplacer le script/l'application dans un autre répertoire, tel que /opt
, puis à lui créer un lien symbolique. De cette façon, vous pouvez l'exécuter simplement par /path/to/symlink
. Par exemple, vous pourriez faire:
Sudo mv /path/to/SCRIPT.sh /opt
ln -s /opt/SCRIPT.sh /path/to
Ensuite, vous pouvez simplement taper /path/to/SCRIPT.sh
pour l'exécuter.
MISE À JOUR AVEC LA SOLUTION
Découvrez que le problème est lié au profil de sécurité apparmor de l’application Terminal. Voir ma question et ma réponse ici: buntu touch - les fichiers exécutables ne se lanceront pas dans le répertoire/home
Essayez de changer la ligne de shabang en
#!/bin/bash
plutôt que
#!/bin/sh
Cela fera passer l'interprète à bash plutôt que sh. Cela devrait être plus simple.