শেল স্ক্রিপ্ট: রান স্ক্রিন, বিভিন্ন স্ক্রীন খুলুন এবং প্রতিটিতে একটি কমান্ড চালান


1

শিরোনাম বলছে কি অনেক সুন্দর:

আমার শেল স্ক্রিপ্ট উচিত

  • রান কমান্ড এ, সম্পন্ন না হওয়া পর্যন্ত অপেক্ষা করুন
  • চালান "পর্দা"
  • প্রাথমিক পর্দায় রান কমান্ড B1
  • নতুন উইন্ডো খুলুন (সাধারণত সিএমডি-এ-সি এর মাধ্যমে)
  • নতুন উইন্ডোতে রান কমান্ড B2
  • নতুন উইন্ডো খুলুন
  • নতুন উইন্ডোতে রান কমান্ড B3

এটি এমন, কিছু (বা সমস্ত) হওয়া পর্যন্ত অপেক্ষা করার প্রয়োজন নেই, যদিও এটি বোনাস পয়েন্ট দেবে। আমি কিভাবে এটা করতে পারে?


নিজেকে একটি উপকার, সুইচ করুন tmux থেকে screen, এটা অনেক ভাল টার্মিনাল মাল্টিপ্লেক্সার। আপনার প্রশ্নের উত্তর: unix.stackexchange.com/a/152740
Alex

উত্তর:


1

একটি ব্যাকগ্রাউন্ড শুরু করুন screen "mysession" অধিবেশন নাম দিন:

screen -d -m -S mysession

চালান top প্রথম উইন্ডোতে

screen -S mysession -X exec top

আরেকটি উইন্ডো শুরু করুন, এটি "win1" নাম দিন এবং " vmstat 10 " এটা

screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10

আরেকটি উইন্ডো শুরু করুন, এটি "win2" নাম দিন এবং চালান " iostat 30 " এটা

screen -S mysession -X screen -t win2 
screen -S mysession -p win2 -X exec iostat 30

সংযোগ এবং অধিবেশন দেখতে:

screen -x -S mysession

প্রোগ্রামের যে কোনও প্রস্থান হলে উইন্ডোটি বন্ধ হবে না screen প্রতিটি একটি শেল শুরু হবে (প্রয়োজন হলে আপনি ব্যবহার করতে পারেন)।

- বা - যদি আপনি শুধুমাত্র উইন্ডো প্রতি একক কমান্ড চান, অথবা প্রসেসগুলি সম্পূর্ণ হওয়ার পরে আরো সহজে পরিষ্কার করতে চান তবে প্রতিটি উইন্ডোতে ডিফল্ট শেলটি চালান না, শুধুমাত্র কমান্ড (গুলি):

screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0    # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30

screen উইন্ডোটি "সমাপ্ত করা" হবে (সম্ভবত উইন্ডো সামগ্রীগুলি অক্ষত রেখে, দেখুন zombie নীচের) প্রক্রিয়াটি যখন প্রস্থান করে, বা তাদের বন্ধ করে দেয়:

screen -S mysession -X quit   # nuke whole the session

অথবা

screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill

(এটি কোনো চলমান প্রসেসগুলি মারতে পারে নাকি পারে না, screen যদিও প্রতিটি একটি SIGHUP পাঠাতে হবে)

তুমি যদি চাও screen উইন্ডোগুলি স্বয়ংক্রিয়ভাবে বন্ধ করার জন্য, এবং সমস্ত প্রক্রিয়া সম্পন্ন হলে প্রস্থান করুন, সেশন তৈরি করার পরে এটি যুক্ত করুন (যদিও আপনার কাছে নেই zombie আপনার মধ্যে সেট .screenrc, সম্ভবত এটি সম্ভবত ডিফল্ট):

screen -S mysession -X zombie

যে "zombie" বন্ধ এবং পুনরুত্থান কী অস্তিত্ব, উইন্ডোজ তারপর অদৃশ্য যখন প্রতিটি উইন্ডো কমান্ড সমাপ্ত, screen শেষ উইন্ডো যখন নিজেই বন্ধ হবে। (আপনি ব্যবহার করার প্রয়োজন হতে পারে defzombie পরিবর্তে zombie, কিন্তু বিপরীতে ডকুমেন্টেশন সত্ত্বেও শুধুমাত্র আমার জন্য পরের কাজ।)


মহান উত্তর। সম্পূরকতার জন্য, যদি আমি একক স্ক্রীন উইন্ডোতে একাধিক কমান্ড চালাতে চেয়েছিলাম, তবে আগের উইন্ডো-নির্দিষ্ট কমান্ড শেষ হয়ে গেলে আমি এটি কোথায় রাখতে পারি এবং এটি সারিবদ্ধ হবে?
FooBar

যদি আপনি একাধিক সঙ্গে এই কাজ screen -X exec প্রোগ্রামগুলি একযোগে একই উইন্ডো ভাগ করে নেবে প্রোগ্রামগুলি, যা সাধারণত আপনি চান না ;-) এরকম কিছু চেষ্টা করুন screen -S mysession -X screen -t win1 -X sh -c "command1; command2" sequentially চালানোর জন্য।
mr.spuratic
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.