নিম্নলিখিত কোড বিবেচনা করুন:
String commandf = "ls /etc | grep release";
try {
// Execute the command and wait for it to complete
Process child = Runtime.getRuntime().exec(commandf);
child.waitFor();
// Print the first 16 bytes of its output
InputStream i = child.getInputStream();
byte[] b = new byte[16];
i.read(b, 0, b.length);
System.out.println(new String(b));
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
প্রোগ্রামটির ফলাফল:
/etc:
adduser.co
আমি যখন শেল থেকে দৌড়ে যাই, অবশ্যই এটি প্রত্যাশার মতো কাজ করে:
poundifdef@parker:~/rabbit_test$ ls /etc | grep release
lsb-release
ইন্টারনেটস আমাকে বলে যে, পাইপের আচরণ ক্রস প্ল্যাটফর্ম নয়, জাভা উত্পাদনকারী জাভা ফ্যাক্টরিতে কাজ করা উজ্জ্বল মনগুলি পাইপগুলির কাজের গ্যারান্টি দিতে পারে না।
কিভাবে আমি এটি করতে পারব?
আমি আমার সমস্ত পার্সিং এর পরিবর্তে জাভা কনস্ট্রাক্টস grep
এবং এর পরিবর্তে ব্যবহার করতে যাচ্ছি না sed
, কারণ যদি আমি ভাষাটি পরিবর্তন করতে চাই তবে আমি সেই ভাষায় আমার পার্সিং কোডটি পুনরায় লিখতে বাধ্য হব, যা পুরোপুরি কোনও অচল।
শেল কমান্ড কল করার সময় আমি জাভা কীভাবে পাইপিং এবং পুনঃনির্দেশ করতে পারি?
command | grep foo
চালানো command
এবং চালানোর মাধ্যমে আরও ভাল । এটি আপনার কোডটিকে কিছুটা জটিল করে তোলে তবে আপনি সামগ্রিক সংস্থান ব্যবহার এবং আক্রমণ পৃষ্ঠকে উল্লেখযোগ্যভাবে হ্রাস করেন।