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
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.
«La deterrenza è l'arte di creare nell'animo dell'eventuale nemico il terrore di attaccare. Ed è proprio a causa dei congegni che determinano la decisione automatica irreversibile, escludendo ogni indebita interferenza umana, che l'ordigno "Fine di Mondo" è terrorizzante, eh, eh, eh, e di facile comprensione. E assolutamente credibile e convincente.»
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");
«La deterrenza è l'arte di creare nell'animo dell'eventuale nemico il terrore di attaccare. Ed è proprio a causa dei congegni che determinano la decisione automatica irreversibile, escludendo ogni indebita interferenza umana, che l'ordigno "Fine di Mondo" è terrorizzante, eh, eh, eh, e di facile comprensione. E assolutamente credibile e convincente.»