Como executar um script de shell no Ubuntu-touch?

2

Eu quero executar um script de shell no meu telefone "bq Aquaris E4.5 Ubuntu-Edition" no Terminal App e criei um script de shell em /home/phablet/Documents/sync.sh

#!/bin/sh
# sync contacts and calendar with OwnCloud
syncevolution owncloud calendar-defaultcalendar
syncevolution --sync slow owncloud contacts
exit 0

O script é executável, mas retorna:

bash: ./sync.sh: /bin/sh: bad interpreter : Permission denied

Não tenho certeza de qual interpretador é executado no Ubuntu-touch (bash, sh, ??) e também não tenho certeza de quais direitos o usuário padrão possui.

Então, o que há de errado ou está faltando?

    
por Ralf Hersel 24.04.2015 / 23:01

4 respostas

3

Parece que um bug no ubuntu-terminal-app .

A descrição do erro menciona uma solução alternativa:

  

Parece funcionar quando eu uso bash ./testscript .

O ./ é opcional

    
por Velkan 25.04.2015 / 00:13
2

Seja o que for (um bug ou uma configuração estranha):

./yourscript.sh

não funciona no Ubuntu-touch. A solução alternativa é:

bash yourscript.sh
    
por Ralf Hersel 25.04.2015 / 15:56
2

Após alguns testes (preliminares), parece-me que isso não é um bug com o ubuntu-terminal-app, mas sim com a permissão de lançar arquivos executáveis a partir do diretório inicial. É por isso que bash /path/to/file funcionou, mas /path/to/file não, porque o bash reside em /bin .

Eu tentei executar um script bash, um script python e um programa c ++ compilado em g ++ hello-world, todos com o bit executável definido, e nenhum será executado quando em um subdiretório de /home . Nenhum será executado, enquanto scripts e aplicativos em outros subdiretórios do root são executados corretamente.

Infelizmente, ainda estou tentando encontrar uma solução: não há nada em /etc/fstab para sugerir que /home esteja montado como noexec :

/userdata/user-data /home none bind 0 0

Eu até tentei remontá-lo explicitamente como exec usando mount -o remount,rw,exec /home sem sucesso. Vai atualizar se eu encontrar uma solução.

Até agora, a única solução é usar um interpretador para executar scripts (Bash / Python etc.) ou /lib/ld-linux-armhf.so.3 /path/to/file para aplicativos binários.

Atualização menor: Uma solução um pouco mais elegante é mover o script / aplicativo para outro diretório, como /opt , e, em seguida, criar links simbólicos para ele. Dessa forma, você pode executá-lo apenas por /path/to/symlink . Por exemplo, você poderia fazer:

sudo mv /path/to/SCRIPT.sh /opt
ln -s /opt/SCRIPT.sh /path/to

Em seguida, você pode digitar /path/to/SCRIPT.sh para executá-lo.

ATUALIZAÇÃO COM SOLUÇÃO

Descobri que o problema está relacionado ao perfil de segurança do apparmor para o aplicativo terminal. Veja minha pergunta e resposta aqui: Ubuntu toque - arquivos executáveis ganhou ' t iniciar no diretório / home

    
por R160K 10.07.2015 / 03:40
0

Tente alterar a linha do shabang para

#!/bin/bash

em vez de

#!/bin/sh

Isso fará com que o intérprete padrão seja bash, ao invés de sh. Isso deveria ser mais simples.

    
por Daniel 20.05.2015 / 21:29