L'impossibilité d'Exécution.exec() pour exécuter la commande du shell “echo” dans le code Java Android
Je peux utiliser Runtime.exec()
pour exécuter des commandes shell comme "getprop
" et "ls system
" et qu'ils fonctionnent très bien.
Cependant, lorsque j'utilise "echo $BOOTCLASSPATH
", "echo \\$BOOTCLASSPATH
" ou "echo HelloWorld
", il ne l'affiche pas dans stdout.
Le logcat montre:
I/AndroidRuntime( 4453): VM exiting with result code -1.
Voici mon code:
try {
java.lang.Process proc = Runtime.getRuntime().exec("echo -e \$BOOTCLASSPATH");
String line = null;
InputStream stderr = proc.getErrorStream();
InputStreamReader esr = new InputStreamReader (stderr);
BufferedReader ebr = new BufferedReader (esr);
while ( (line = ebr.readLine()) != null )
Log.e("FXN-BOOTCLASSPATH", line);
InputStream stdout = proc.getInputStream();
InputStreamReader osr = new InputStreamReader (stdout);
BufferedReader obr = new BufferedReader (osr);
while ( (line = obr.readLine()) != null )
Log.i("FXN-BOOTCLASSPATH", line);
int exitVal = proc.waitFor();
Log.d("FXN-BOOTCLASSPATH", "getprop exitValue: " + exitVal);
} catch (Exception e) {
e.printStackTrace();
}
L'espérance ceci vous aider.
Il semble que vous n'avez pas de /bin/echo sur ce système; echo est également disponible comme une commande shell. Essayez de exec
Ce lien renvoie à des problèmes sur Windows. Ick.
J'ai essayé ceci:
Merci Copain @QYLin , vous avez sauvé ma vie. pouvez-vous expliquer pourquoi cela se produit?
Il semble que vous n'avez pas de /bin/echo sur ce système; echo est également disponible comme une commande shell. Essayez de exec
sh -c "echo -e \\$BOOTCLASSPATH"
Ce lien renvoie à des problèmes sur Windows. Ick.
J'ai essayé ceci:
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" };
Runtime.getRuntime().exec(cmdline);
et il fonctionne. Merci les gars.Merci Copain @QYLin , vous avez sauvé ma vie. pouvez-vous expliquer pourquoi cela se produit?
OriginalL'auteur QY Lin | 2014-08-08
Vous devez vous connecter pour publier un commentaire.
@Adi Tiwari, j'ai trouvé la cause.
Runtime.getRuntime.exec()
ne pas exécuter une commande shell directement, il exécute un fichier exécutable avec des arguments."
echo
" est un builtin shell de commande. C'est en fait une partie de l'argument de l'exécutablesh
avec l'option-c
.Des commandes comme
ls
sont des fichiers exécutables.Vous pouvez utiliser
type echo
ettype ls
commande enadb shell
pour voir la différence.Alors au final le code est:
OriginalL'auteur QY Lin