Kendi kendine yeten bir yöntem yapmak için @ Tim'in örneğine dayanarak:
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Shell {
public static ArrayList<String> command(final String cmdline,
final String directory) {
try {
Process process =
new ProcessBuilder(new String[] {"bash", "-c", cmdline})
.redirectErrorStream(true)
.directory(new File(directory))
.start();
ArrayList<String> output = new ArrayList<String>();
BufferedReader br = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = null;
while ( (line = br.readLine()) != null )
output.add(line);
if (0 != process.waitFor())
return null;
return output;
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
test("which bash");
test("find . -type f -printf '%T@\\\\t%p\\\\n' "
+ "| sort -n | cut -f 2- | "
+ "sed -e 's/ /\\\\\\\\ /g' | xargs ls -halt");
}
static void test(String cmdline) {
ArrayList<String> output = command(cmdline, ".");
if (null == output)
System.out.println("\n\n\t\tCOMMAND FAILED: " + cmdline);
else
for (String line : output)
System.out.println(line);
}
}
(Test örneği, bir dizindeki tüm dosyaları ve alt dizinlerini kronolojik sırada yinelemeli olarak listeleyen bir komuttur .)
Bu arada, biri bana neden orada iki ve dört yerine dört ve sekiz ters eğik çizgiye ihtiyacım olduğunu söylerse, bir şeyler öğrenebilirim. Saydığımdan bir kaçış geri dönüş seviyesi daha var.
Düzenleme: Aynı kodu Linux'ta da denedim ve orada test komutunda yarısı kadar ters eğik çizgiye ihtiyacım olduğu ortaya çıktı! (Yani: beklenen iki ve dört sayısı.) Artık bu sadece tuhaf değil, taşınabilirlik sorunu.
cat
vecsh
birbirinizle hiçbir ilgisi yok.