MI chiedevo se e come fosse possibile avviare un comando linux ad esempio ls e ottenere il risultato che di norma andrebbe nello stdout in un oggetto String
Visualizzazione stampabile
MI chiedevo se e come fosse possibile avviare un comando linux ad esempio ls e ottenere il risultato che di norma andrebbe nello stdout in un oggetto String
Prova così
Sull'emulatore funziona e non ho voglia di prendere il mio nexxy 'chè sta in carica.codice:package it.lorenzoff;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class dummyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Runtime rt = Runtime.getRuntime();
try {
Process ps = rt.exec("ls");
InputStream is = ps.getInputStream();
ps.waitFor();
is.read();
final char[] buffer = new char[0x10000];
StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(is, "UTF-8");
int read;
do {
read = in.read(buffer, 0, buffer.length);
if (read>0) {
out.append(buffer, 0, read);
}
} while (read>=0);
TextView t = (TextView)findViewById(R.id.testo);
t.setText(out.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ad ogni modo, non me l'aspettavo che funzionasse nel senso che -a rigor di logica- 'ls' non è un comando linux, come dici tu, ma soltanto un comando di (di molte delle) shell comunemente disponibili per questo sistema.
La riga...
...mi aspettavo dovesse includere anche la shell; mi aspettavo quindi di dover scrivere...codice:Process ps = rt.exec("ls");
...ma evidentemente una shell di sottofondo c'è e gira, almeno nell'emulatore.codice:Process ps = rt.exec("suffisso.dominio.nomeshell ls");
Cedo la parola volentieri a riguardo, anche perchè le cinque meno cinque del mattino non sono ora adatta a discorsi che vadano oltre pupù, pappa e nanna.
Infatti, ricollegando il cervello ad un'ora più civile, ho trovato dentro /system/bin un allegro eseguibile che non necessita di presentazioni: sh.
Quindi quell'dovrebbe andare sempre benone: dick, stai in una botte de fero.codice:Process ps = rt.exec("ls");