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
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?
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
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
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
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.