আমি কীভাবে একাধিক কমান্ড চালাতে পারি যা একটি কমান্ড লাইনে আছে?


12

আমি মাথা ব্যথার সমস্যার মুখোমুখি হয়েছি।

আমি ব্যাকগ্রাউন্ডে মাল্টিপল কমান্ডগুলি কার্যকর করতে চাই, তাই আমি একে একে একে ব্যাশে শুরু করতে চাই। পটভূমিতে লিনাক্স শেলটিতে একটি কমান্ড শুরু করা সহজ:

myCommand &

একাধিক কমান্ড শুরু করাও সহজ, ঠিক এর মতো:

myCommand1 && myCommand2

অথবা

myCommand1 ; myCommand2

তবে যদি আমি ব্যাকগ্রাউন্ডে একাধিক কমান্ড চালাতে চাই, আমি নিম্নলিখিত কমান্ড ফর্ম্যাটটি চেষ্টা করেছিলাম, তবে ব্যর্থ হয়েছি:

myCommand1 & && myCommand2 &

অথবা

myCommand1 & ; myCommand2 &

উভয় ফর্ম্যাট ব্যর্থ। &একটি কমান্ড লাইনে থাকা একাধিক কমান্ড কীভাবে চালাতে পারি ?


2
এগুলি একটি স্ক্রিপ্টে রেখে স্ক্রিপ্টটি পটভূমিতে চালান
প্যান্থার



প্যান্থার, মনে হয় () ব্যবহার করে কোনও স্ক্রিপ্ট ব্যবহারের চেয়ে এই সমস্যাটি সমাধান করা খুব সহজ হতে পারে। আসুন আমরা নিজেরাই কী চাই তা রচনা না করে প্রথমে শেলের দ্বারা সরবরাহিত বৈশিষ্ট্যগুলির পুরো ব্যবহার করার চেষ্টা করি। তবে অবশ্যই, স্ক্রিপ্ট ব্যবহার করাও এই সমস্যার সমাধান করতে পারে। যাই হোক ধন্যবাদ.
ক্লাব ZHONG

আমি যদি 'টেল -F <file1>> <file2>' চালাতে চাই তবে '
জবস-

উত্তর:


24

() ব্যবহার করুন।

আপনি যদি সেগুলি ক্রমানুসারে চালাতে চান:

(myCommand1; myCommand2) &

অথবা

(myCommand1 &) && (myCommand2 &)

আপনি যদি এগুলি সমান্তরালভাবে চালাতে চান:

myCommand1 & myCommand2 &

ব্যাশে আপনি এটিও ব্যবহার করতে পারেন (behind এবং এর পিছনের স্থানটি বাধ্যতামূলক):

{ myCommand1 && myCommand2; } &

3
(myCommand1 &) && (myCommand2 &)ব্যর্থ myCommand2হলেও চলবে myCommand1
টেরডন

() বাশকে &&& এর পার্থক্য করতে সহায়তা করতে পারে। সুতরাং যখন আমরা &&& টোগথারটি ব্যবহার করতে চাই তখন কেবল এক্সিকিউশন ইউনিটকে আলাদা করতে () ব্যবহার করুন।
ক্লক Zhong

16

আমি মনে করি আপনি এটি চান:

myCommand1 & myCommand2 &

এটি অ্যাম্পারস্যান্ড অনুসারে এটি শুরু হয় myCommand1এবং ব্যাকগ্রাউন্ডে প্রেরণ করে, তত্ক্ষণাত শুরু হয় myCommand2এবং এটিকে ব্যাকগ্রাউন্ডে প্রেরণ করে, সুতরাং শেলটি আবার মুক্তি দেয় le

তালিকাসমূহ

আরও ভাল বোঝার জন্য আপনি এখানে কমান্ড দ্বারা পাইপলাইন বিকল্প করতে পারেন ।

একটি তালিকা অপারেটরগুলির মধ্যে একটি দ্বারা পৃথক পৃথক এক বা একাধিক পাইপলাইনগুলির ক্রম ; , & , && , বা || , এবং বিকল্পগুলির মধ্যে একটি দ্বারা অবসান ; , এবং , বা

যদি কমান্ডটি কন্ট্রোল অপারেটর & এর মাধ্যমে সমাপ্ত হয় , তবে শেলটি একটি সাবশেলের পটভূমিতে কমান্ডটি কার্যকর করে। শেলটি কমান্ডটি শেষ হওয়ার জন্য অপেক্ষা করে না, এবং ফেরতের স্থিতি 0 হয় কমান্ড a দ্বারা পৃথক ; ধারাবাহিকভাবে মৃত্যুদন্ড কার্যকর করা হয়; শেল প্রতিটি কমান্ডের জন্য ঘুরে দাঁড়ানোর জন্য অপেক্ষা করে। রিটার্নের স্থিতি হ'ল শেষ আদেশের নির্বাহ স্থিতি।

AND এবং OR তালিকা হল && এবং || দ্বারা পৃথক করা এক বা একাধিক পাইপলাইনগুলির ক্রম কন্ট্রোল অপারেটর যথাক্রমে।
উৎস:man bash

উদাহরণস্বরূপ এটি ভাঙ্গা যাক। আপনি কমান্ডগুলি সংযুক্ত করে এবং এর মধ্যে একটির সাথে পৃথক করে একটি তালিকা তৈরি করতে পারেন ; & && ||:

command1 ; command2  # runs sequentially
command1 && command2 # runs sequentially, runs command2 only if command1 succeeds
command1 || command2 # runs sequentially, runs command2 only if command1 fails
command1 & command2  # runs simultaneously

আপনি এই এক সঙ্গে তালিকা বিনষ্ট করতে পারেন: ; & <newline>
সাধারণত আপনি একটি কমান্ড বা একটি টিপুন দ্বারা একটি তালিকা চালিত Enter, যে সমান <newline>। সেমিকোলন ;বিশেষত স্ক্রিপ্টগুলিতে একই উদ্দেশ্যটি সরবরাহ করে। আম্পারস্যান্ড &তত্ক্ষণাত শেলটি প্রকাশ করে পটভূমির একটি সাব-শেলের কমান্ড (গুলি) শুরু করে।

আপনি আরও গোষ্ঠী তালিকার জন্য বৃত্তাকার ()বা কোঁকড়ানো বন্ধনী ব্যবহার করতে পারেন {}, পার্থক্য হ'ল বৃত্তাকার বন্ধনীগুলি একটি সাবশেল বানায় এবং কোঁকড়াগুলি তা দেয় না। কোঁকড়া বন্ধনী প্রথম এবং একটি সেমিকোলন পরে ক্লোজিং বন্ধনী আগে একটি নতুন লাইন প্রয়োজন। উদাহরণ স্বরূপ:

# if c1 succeeds start a shell in the background
# and run c2 and c3 sequentially inside it
c1 && ( c2 ; c3 ) & 
# run c1 and if it succeeds c2 sequentially as a group command
# if c1 or c2 fail run c3 in the background
{ c1 && c2 ;} || c3 &

এটি বেশ জটিল হয়ে উঠতে পারে, আপনি যদি ব্যবহারের বিষয়ে অনিশ্চিত হন trueএবং নির্মাণটি falseপ্রত্যাশার মতো কাজ করে কিনা তা পরীক্ষা করে দেখার জন্য:

$ { true && true ;} || echo 2
$ { true && false ;} || echo 2
2

কাজ নিয়ন্ত্রণ

jobsকমান্ডের দৌড়াচ্ছে যে বা সম্প্রতি বর্তমান শেল সমাপ্ত হয়েছে পটভূমি কাজ একটি তালিকা। কাজ নিয়ন্ত্রণের জন্য অনেকগুলি কীবোর্ড শর্টকাট এবং কমান্ড রয়েছে:

  • Ctrl+ স্থগিত চরিত্রটি Zটাইপ করে যার ফলে অগ্রভাগে চলমান প্রক্রিয়াটি বন্ধ হয়ে যায়, এটি সমাপ্ত হয় না, তবে তালিকায় থাকেjobs
  • Ctrl+ বিলম্ব স্থগিত করা অক্ষর Yটাইপ করে যা টার্মিনাল থেকে ইনপুট পড়ার চেষ্টা করার সময় অগ্রভাগে চলমান প্রক্রিয়াটি বন্ধ করার কারণ ঘটায়
  • fg= %যদি প্রয়োজন হয় তবে এটি শুরু করে অগ্রভাগের মধ্যে একটি প্রক্রিয়া নিয়ে আসে, আপনি প্রক্রিয়াটি নীচে উল্লেখ করতে পারেন:

     %       # last process in the jobs list
     %1      # 1st process in the jobs list
     %abc    # process beginning with the string “abc”
     %?abc   # process containing the string “abc” anywhere
  • bg= %&প্রয়োজনে ব্যাকগ্রাউন্ডে এটি প্রক্রিয়া শুরু করে:

     %&      # last process in the jobs list
     %1&     # 1st process in the jobs list
     %abc&   # process beginning with the string “abc”
     %?abc&  # process containing the string “abc” anywhere
  • wait একটি পটভূমি প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করে এবং এর সমাপ্তির স্থিতি ফেরত দেয়:

     wait %1 # 1st process in the jobs list

    কল্পনা করুন যে আপনি একটি দীর্ঘ প্রক্রিয়া শুরু করেছেন ( jobsএটি 3 নম্বরটি প্রকাশ করে) এবং তারপরে আপনি বুঝতে পারেন যে কম্পিউটারটি শেষ হয়ে গেলে স্থগিত করা উচিত, এছাড়াও echoপ্রক্রিয়াটি সফল না হলে একটি বার্তা:

     wait %3 || echo failed ; systemctl suspend

তবে && এর সাথে সতর্কতা অবলম্বন করা গুরুত্বপূর্ণ কমান্ডটি কী প্রত্যাবর্তন করবে তার উপর নির্ভরশীল , তাই আমাদের নিশ্চিত হওয়া দরকার যে আমরা যা বলি বাস্তবে যে কোনও কিছু প্রত্যাবর্তন ঘটে তাকে সত্যবাদী মূল্য বলে বিবেচনা করে ..?
ম্যাথ্রেডলার

@ ম্যাথ্রেডলার যতক্ষণ না আপনি কিছু খারাপভাবে তৈরি ইউজার স্ক্রিপ্টের কথা বলছেন প্রস্থান মূল্য খুব ভালভাবে সংজ্ঞায়িত (দেখুন man bash) এবং এটি আফাইক হিসাবে ঠিক যেমনটি ব্যবহৃত হয়েছে তেমনভাবে ব্যবহার করা হয় - আমি কখনও অদ্ভুত কিছুই অনুভব করিনি।
মিষ্টি

ঠিক যেমনটি, খারাপ ব্যবহারকারীর তৈরি স্ক্রিপ্টগুলির বিষয়ে আমাদের সতর্ক হওয়া উচিত। এগুলির উপস্থিতি রয়েছে এবং এ জাতীয় বাগগুলি খুঁজে পেতে ব্যথা হতে পারে। আসকবুন্টু আমাকে "@ মিষ্টি" দেওয়ার অনুমতি দেয় না।
ম্যাথ্রেডলার

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