Berechtigungen für Android-Shell-Skripte? [Duplikat]

Ich habe ein gerootetes Telefon und habe mit Terminal Emulator herumgespielt. Ich habe versucht, ein einfaches Shell-Skript (test.sh) zu schreiben:

#!/bin/sh
echo "Hello, World!" 

Dann öffnete ich den Terminal-Emulator, cd in das Verzeichnis, in dem sich mein Skript befand, und tippte:

./test.sh

und ich habe eine Fehlermeldung "Zugriff verweigert". Also habe ich versucht:

su
./test.sh

Irgendwie immer noch die Erlaubnis verweigert. Also habe ich versucht (noch als root):

chmod 775 test.sh
busybox chmod 775 test.sh
busybox chmod +X test.sh

Keiner der 3 gab Fehler, aber ./test.sh gab immer noch die Erlaubnis verweigert! Als letzten Ausweg habe ich es versucht

sh test.sh

Das hat am Ende funktioniert. Endlich.

Ich bin neugierig, warum die Berechtigung für mein eigenes Shell-Skript, das auf 775 geändert wurde, verweigert wurde, wenn es als Root ausgeführt wurde. Wie kann die Berechtigung für irgendetwas als root verweigert werden? Wie kann ich das beheben und ./test.sh zum Laufen bringen?

Dies hängt weitgehend davon ab, wo sich das Skript im Dateisystem befindet. Wenn Sie also hinzufügen könnten, dass dies wahrscheinlich hilfreich wäre. Wenn es sich auf der SD-Karte befindet (oder was auch immer Ihr Gerät als "externen Speicher" verwendet), müssen Sie die Partition wahrscheinlich neu mounten oder so etwas, da Android sie noexecstandardmäßig mit dem Flag mountet.
Es liegt auf der SD-Karte. Ich werde versuchen, neu zu montieren.
busybox chmod +X test.shfalsch ist, möchten Sie +x(Kleinbuchstaben) verwenden. Wie auch immer, 775am Ende ist es dasselbe, also ist es das noexecProblem.

Antworten (1)

Ausführungsberechtigungen auf der SDCard sind aus diesem Grund gesperrt.

Sieh dir das an:

/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,**noexec**,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

Der mit zwei Sternchen hervorgehobene noexec- Teil dieser Zeile ist der Schlüssel, um die Ausführung von Skripten/Binärdateien von der SD-Karte zu verhindern.

Habe ein komisches Gefühl, dass dies schon einmal beantwortet wurde ... deja-vu

Bearbeiten

Yup @Izzy hat dies schon einmal beantwortet und auch hier .