web-dev-qa-db-fra.com

Comment exécuter un script shell sur Ubuntu-touch?

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?

2
Ralf Hersel

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

3
Velkan

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
2
Ralf Hersel

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

2
R160K

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.

0
Daniel