উত্তর:
যদি আপনি প্রতিটি কমান্ড কেবলমাত্র যদি পূর্ববর্তীটি সফল হয় তবে কার্যকর করতে চান, তবে &&
অপারেটরটি ব্যবহার করে তাদের একত্র করুন :
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
যদি কমান্ডগুলির মধ্যে একটি ব্যর্থ হয়, তবে এটি অনুসরণ করে অন্য সমস্ত কমান্ড কার্যকর করা হবে না।
পূর্ববর্তীগুলি ব্যর্থ হয়েছে কিনা তা নির্বিশেষে আপনি যদি সমস্ত কমান্ড কার্যকর করতে চান তবে সেমিকোলনগুলি দিয়ে তাদের আলাদা করুন:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
আপনার ক্ষেত্রে, আমি মনে করি আপনি প্রথম মামলাটি চান যেখানে পরবর্তী কমান্ড কার্যকর করা পূর্ববর্তী সাফল্যের উপর নির্ভর করে।
আপনি কোনও স্ক্রিপ্টে সমস্ত কমান্ডও রাখতে পারেন এবং পরিবর্তে এটি কার্যকর করতে পারেন:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
(লাইনের শেষে ব্যাকস্ল্যাশগুলি শেলটি এই ভাবনা থেকে রক্ষা করতে পারে যে পরের লাইনটি একটি নতুন কমান্ড;
এটি একটি ফাইলে সংরক্ষণ করুন, উদাহরণস্বরূপ myscript
, এবং এটি সম্পাদনযোগ্য করুন:
chmod +x myscript
আপনি এখন মেশিনে অন্যান্য প্রোগ্রামের মতো স্ক্রিপ্টটি কার্যকর করতে পারেন। তবে যদি আপনি এটিকে আপনার PATH
পরিবেশের পরিবর্তনশীল (উদাহরণস্বরূপ /usr/local/bin
, বা কিছু লিনাক্স বিতরণে ~/bin
) তালিকাভুক্ত ডিরেক্টরিতে স্থাপন না করেন তবে আপনাকে সেই স্ক্রিপ্টের পথ নির্দিষ্ট করতে হবে specify এটি যদি বর্তমান ডিরেক্টরিতে থাকে তবে আপনি এটি দিয়ে এটি সম্পাদন করুন:
./myscript
স্ক্রিপ্টের কমান্ডগুলি প্রথম উদাহরণের কমান্ডগুলির মতোই কাজ করে; পূর্ববর্তী কমান্ড কেবলমাত্র কার্যকর হয় যদি পূর্ববর্তীটি সফল হয়। সমস্ত কমান্ডের নিঃশর্ত কার্যকর করার জন্য, প্রতিটি কমান্ডকে তার নিজস্ব লাইনে কেবল তালিকাবদ্ধ করুন:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
ls >/dev/null & ; echo $!
একটি ত্রুটি ট্রিগার করে।
tail -f my.log & && ./myscript
যা কাজ করছে না .. দয়া করে পরামর্শ দিন।
{ tail -f my.log & } && ./myscript
তবে মনে রাখবেন যে এখানে &&
কাজটি নিরর্থক, যেহেতু প্রথম কাজটি পটভূমিতে চলে এবং সুতরাং দ্বিতীয় কাজ ফলাফল জানতে পারে না, যেহেতু উভয় কাজ একই সাথে শুরু হবে। সুতরাং আপনি পাশাপাশি কেবল লিখতে পারেন:{ tail -f my.log & }; ./myscript
sudo
কোনও কমান্ড চালানোর অনুমতি প্রয়োজন ? আমি কি sudo
সমস্ত কমান্ডের সূচনা করতে পারি বা কেবল যেটিকে এটির প্রয়োজন হয় তাতে করে দেওয়া উচিত? আমি কীভাবে সেই আদেশটিতে পাসওয়ার্ডটি পাস করতে পারি যাতে এটি কার্যকরভাবে সম্পাদিত হয়?
আমি খুঁজে পেয়েছি যে ব্যবহার করে; পৃথক কমান্ড কেবল অগ্রভাগে কাজ করে। যেমন:
cmd1; cmd2; cmd3 &
- শুধুমাত্র cmd3
পটভূমিতে কার্যকর করা হবে , যেখানে
cmd1 && cmd2 && cmd3 &
- কোনও ত্রুটি না থাকলে ব্যাকগ্রাউন্ডে পুরো শৃঙ্খলা কার্যকর করবে।
নিঃশর্ত কার্যকর করার জন্য, প্রথম বন্ধনী ব্যবহার করে এটি সমাধান করে:
(cmd1; cmd2; cmd3) &
- কোনও পদক্ষেপ ব্যর্থ হলেও পটভূমিতে শৃঙ্খলাবদ্ধ কমান্ডগুলি কার্যকর করবে।
এগুলি একবারে চালাতে, আপনি পাইপ লাইনের কী "" "ব্যবহার করতে পারেন তাই ভালো:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install
যদি আপনি সমস্ত কমান্ড প্রয়োগ করতে চান, পূর্ববর্তীটি কার্যকর হয় বা না, আপনি কমান্ডগুলি পৃথক করতে সেমিকোলন (;) ব্যবহার করতে পারেন।
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
আপনি যদি পূর্ববর্তী কমান্ডটি সফল হয় তবেই পরবর্তী কমান্ডটি কার্যকর করতে চান তবে আপনি কমান্ডগুলি পৃথক করতে && ব্যবহার করতে পারেন।
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
আপনার ক্ষেত্রে, ধারাবাহিক কমান্ডগুলির সম্পাদনটি পূর্ববর্তী কমান্ডগুলির উপর নির্ভর করে বলে মনে হয়, সুতরাং দ্বিতীয় উদাহরণটি ব্যবহার করুন & কমান্ডগুলিতে যোগ দিতে && ব্যবহার করুন।
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
cmd1 || cmd2
যদি শেল-তে শূন্য-বিহীন স্থিতি ফিরে আসে cmd2
তবেই কেবলমাত্র কার্যকর করতে হবে cmd1
এবং আপনি cmd1 ; cmd2
যদি উভয় কমান্ড তাদের রিটার্নের অবস্থা নির্বিশেষে চালাতে চান তবে আপনি বিভাজক ব্যবহার করতে পারেন ।
একমাত্র একটি এম্পারস্যান্ডের ইউটিলিটি কী? আজ সকালে, আমি একই সাথে 2 টি পাসওয়ার্ড পরিচালককে চালু করতে এক্সএফসিই প্যানেলে (মাঞ্জারো + এক্সএফসিইতে) একটি লঞ্চার তৈরি করেছি:
sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"
তবে আমি যেমন চাই তেমন কাজ করে না। IE, প্রথম অ্যাপ্লিকেশন শুরু হয় তবে দ্বিতীয়টি কেবল তখনই বন্ধ হয় যখন পূর্ববর্তীটি বন্ধ থাকে
তবে, আমি এটি দেখতে পেয়েছি (কেবলমাত্র একটি অ্যাম্পারস্যান্ড সহ):
sh -c "keepassx & password-gorilla"
এবং এটি এখন যেমন চাই তেমন কাজ করে ...
;
আম্পারস্যান্ড কমান্ড টার্মিনেটর হিসাবে অনুরূপ কাজ করে , ব্যাকগ্রাউন্ডে কমমান রাখার আগে এটি শেল এর আউটপুট দেখতে পাবে না।
আপনি নিম্নলিখিত কোড হিসাবে ব্যবহার করতে পারেন;
cd /my_folder && \
rm *.jar && \
svn co path to repo && \
mvn compile package install
এটি কাজ করে ...
এই ধরণের প্রশ্নের বিভ্রান্তিকর জন্য আমি প্রচুর উত্তর পেয়েছি
এই পোস্ট থেকে পরিবর্তিত: https://www.webmasterworld.com/linux/3613813.htm
নিম্নলিখিত কোডটি ব্যাশ উইন্ডো তৈরি করবে এবং ব্যাশ উইন্ডো হিসাবে ঠিক কাজ করবে। আশাকরি এটা সাহায্য করবে. অনেকগুলি ভুল / কাজ না করার উত্তর রয়েছে out
Process proc;
try {
//create a bash window
proc = Runtime.getRuntime().exec("/bin/bash");
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
BufferedReader err = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));
//input into the bash window
out.println("cd /my_folder");
out.println("rm *.jar");
out.println("svn co path to repo");
out.println("mvn compile package install");
out.println("exit");
String line;
System.out.println("----printing output-----");
while ((line = in.readLine()) != null) {
System.out.println(line);
}
while((line = err.readLine()) != null) {
//read errors
}
proc.waitFor();
in.close();
out.close();
err.close();
proc.destroy();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
||
সেমিকোলনের পরিবর্তেও ব্যবহার করতে পারেন বা&&
আপনি যদি চান যে শেষ কমান্ডটি ব্যর্থ হয় তবে পরবর্তী কমান্ডটি কার্যকর করা হয়। যেমন এটি চেষ্টা করে দেখুন, এবং যদি এটি ব্যর্থ হয় তবে চেষ্টা করুন।