একটি স্বয়ংসম্পূর্ণ পদ্ধতি তৈরি করতে @ টিমের উদাহরণের উপর ভিত্তি করে:
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);
}
}
(পরীক্ষার উদাহরণটি এমন একটি কমান্ড যা ক্রমানুক্রমিক ক্রমে পুনরাবৃত্তভাবে একটি ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করে ))
যাইহোক, কেউ যদি আমাকে বলতে পারেন যে আমাকে কেন সেখানে দুটি এবং চারটির পরিবর্তে চার এবং আটটি ব্যাকস্ল্যাশ দরকার I আমি কিছু শিখতে পারি। আমি যা গণনা করছি তার থেকেও অব্যাহতভাবে ঘটে যাওয়ার আরও একটি স্তর রয়েছে।
সম্পাদনা: লিনাক্সে কেবল এই একই কোডটি চেষ্টা করে দেখতে পেলাম যে পরীক্ষার কমান্ডে আমার অর্ধেক ব্যাকস্ল্যাশ দরকার! (এটি: দুই এবং চারটির প্রত্যাশিত সংখ্যা)) এখন এটি কেবল অদ্ভুত নয়, এটি একটি বহনযোগ্যতার সমস্যা।
cat
এবংcsh
একে অপরের সাথে কিছু করার নেই।