আমি কনসোলে কীভাবে কমান্ড চেইন করব?


23

ইন bash, আমি মাঝে মাঝে সিরিয়ালটিতে বেশ কয়েকটি কমান্ড চালাতে চাই এবং আমি নতুন টাইপ করার আগে তাদের শেষ হওয়ার অপেক্ষা করতে চাই না। তাই আমি এরকম কিছু করি:

cmd1; cmd2; cmd3

দুর্ভাগ্যক্রমে, কমান্ডগুলির মধ্যে একটি ব্যর্থ হতে পারে। সেক্ষেত্রে আমি থামতে চাই। এটি করার কোনও সহজ উপায় আছে কি তবে এটি তৈরি করুন যাতে পূর্ববর্তী কমান্ডটিতে 0 প্রস্থান কোড থাকলে আমি কেবলমাত্র কমান্ডগুলি চালিয়ে যেতে পারি?


এখানে ইউনিক্স এসই থেকে দুর্দান্ত উত্তর দেওয়া হয়েছে।
ননলাইনফ্রুট 13

উত্তর:


39

&&অপারেটর ব্যবহার করুন ,

cmd1 && cmd2 && cmd3

শেলস স্ক্রিপ্টিং এ &&এবং ||অপারেটরগুলি সি এর লজিকাল অপারেটরগুলির অনুকূলিতকরণ বাস্তবায়নের পরে মডেল করা হয় &&যার অর্থ এবং অপারেটর এবং এর ||অর্থ ওআর। ইউনিক্স সি এর সাথে দৃly়ভাবে সম্পর্কিত, এবং সিতে লজিকাল অপারেটরগুলির দ্বিতীয় অপারেন্ডটি যদি প্রথম অপারেন্ড থেকে ফলাফল ইতিমধ্যে জানা যায় তবে তা মূল্যায়ন করা হয় না। উদাহরণস্বরূপ "false && x"যে কোনওর falseজন্য x, তাই মূল্যায়ন করার প্রয়োজন নেই x(বিশেষত যদি xকোনও ফাংশন কল হয়); একইভাবে জন্য "true || x"। একে সংক্ষিপ্ত-সার্কিট শব্দার্থবিদ্যাও বলা হয়

এবং ইউনিক্সে, কমান্ডের রিটার্ন মানগুলিকে "সফল সমাপ্তি" সত্যের মান হিসাবে ব্যাখ্যা করা প্রচলিত: প্রস্থান কোড 0 এর অর্থ true(সাফল্য), ননজারো মানে false(ব্যর্থতা)। সুতরাং, যখন প্রথম কমান্ড cmd1 && cmd2রিটার্নে হয় "false"(ননজারো প্রস্থান স্থিতি, যা ব্যর্থতা নির্দেশ করে), তখন যৌগিক কমান্ডের স্থিতিটি জানা যায়: ব্যর্থতা। সুতরাং সামগ্রিক ব্যাখ্যা cmd1 && cmd2 হতে পারে: "কার্যকর করুন cmd1, এবং তারপরে এটি ব্যর্থ না হলে cmd2" " মূলত আপনার প্রশ্নের মধ্যে যা আপনি চান তা।

একইভাবে ওআর: এর সাথে cmd1 || cmd2"এক্সিকিউট cmd1, বা এটি যদি ব্যর্থ হয়" হিসাবে ব্যাখ্যা করা যায় cmd2


প্রতিবাদ: দীর্ঘ শৃঙ্খলার জন্য &&, set -eআপনার স্ক্রিপ্টে রাখার বিষয়টি বিবেচনা করুন । এটি মূলত সেমিকোলন পরিবর্তন ;মধ্যে &&, বিশেষ ক্ষেত্রে একটি দম্পতি সঙ্গে।


1
ব্যাখ্যা করার জন্য +1||
আল্প

প্রথম কমান্ডের স্ট্যাটাস যাই হোক না কেন আপনি চেইন করতে পারেন? (সাফল্য বা ব্যর্থতা)
হুগো ট্রেনটসক্স

@ হুগো ট্রেনটসেক্স আপনার অর্থ কী? .. সাফল্য / ব্যর্থতার ফলাফল বা A || B[শর্ট সার্কিট] লজিক্যাল এ ও বি এর মতই । A || Bহয় বিজয় যখন Aছিল সাফল্য , অথবা যখন Aছিল ব্যর্থতা কিন্তু Bছিল সাফল্য ; এবং A || Bহয় ব্যর্থতা যখন Aছিল ব্যর্থতা এবং Bছিল failure। একইভাবে &&, এটি যৌক্তিক AND অনুসরণ করে।
ulidtko

শেল প্রসঙ্গে, আমি কীভাবে A এবং তারপরে B কার্যকর করব যদি কোনও ব্যর্থ হয় বা সফল হয় তবে তা কীভাবে কার্যকর করা যায়?
হুগো ট্রেনটসেক্স

1
@ হুগো ট্রেনটসাক্স এটিই সরল নিয়মিত ;(বা নিউলাইন) ডিফল্টরূপে করে। set -eপরিণত ;হবে &&, মোটামুটি কথা বলতে। set +e[ডিফল্ট] পালাক্রমে A; Bআপনি কি বলতে মধ্যে: রান A, তারপর নো ব্যাপার-কি চালানোর B
ulidtko

13

"চেইনিং তাদের একটি গ্রুপিংয়ের আদেশ দেয়"

ping 192.168.0.1 || { echo "ping not successful"; exit 1; }

পিংস, শুধুমাত্র সফল না হলে, বন্ধনীগুলিতে শৃঙ্খলিত কমান্ডের গ্রুপটি কার্যকর করে।

মনোযোগ:

তালিকাটি ";" দিয়ে শেষ করতে হবে।

বন্ধনী এবং গোষ্ঠীভুক্ত কমান্ডের মধ্যে অবশ্যই ফাঁকা স্থান থাকতে হবে!


6

কেবল &&অপারেটরের সাথে। এই ক্ষেত্রে:

cmd1 && cmd2 && cmd3

যদি কোনও কমান্ড ব্যর্থ হয় (0 ব্যতীত একটি প্রস্থান মান প্রদান করে), অন্য কমান্ডগুলি চলবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.