স্ক্রিপ্ট থেকে স্ক্রিন চালান (জিএনইউ)


11

আমি স্ক্রিন সেশনের অভ্যন্তরে কিছু অ্যাপ্লিকেশন চালু করতে চাই তবে স্ক্রিপ্ট থেকে।
স্ক্রিপ্ট ব্যতীত আমি কেবল পর্দা চালু করব, তারপরে crtl-ac সহ এন উইন্ডোজ খুলব এবং প্রতিটি উইন্ডোতে প্রোগ্রামগুলি চালিত করবো।

আমি নিম্নলিখিত চেষ্টা করেছিলাম

screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log

তবে আমি যখন সংযুক্ত করি তখন সেশন লেজটি চলমান হয় না। আমি যদি সেশনটির ঠিক পরে সংযুক্ত করি screen -d -m -S startupএবং screen -S startup -X exec tail -f /var/log/messagesঅন্য টার্মিনাল থেকে এটি চালিত হয় works

আমি কি কিছু রেখে গেলাম ?

আলেকসডি উত্তর পরে সম্পাদনা করুন :

একটি অর্ধ কাজের সমাধান হয়

screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log

কমান্ডটি দিয়ে চেইনিং স্ক্রিন কমান্ড (এক্স-এর পরের এক) কমান্ডটি কাজ করছে যখন এক্সিকিউটি সম্ভবত স্ক্রিনটি বিচ্ছিন্ন হওয়ার পরে কোনও বর্তমান উইন্ডো সংজ্ঞায়িত হবে বলে আশা করে না। এই টিপসের জন্য অ্যালেক্সডিকে ধন্যবাদ ।

তবে একটি অদ্ভুত পার্শ্ব প্রতিক্রিয়া রয়েছে: যখন প্রোগ্রামটি বন্ধ হয়ে যায় (আপনি যদি পর্দার সেশনটি সংযুক্ত করেন এবং পুচ্ছটি crtl-c সংযুক্ত করেন, বা পুচ্ছকে হত্যা করেন) স্ক্রিন উইন্ডোটি বন্ধ হয়ে যাবে।
সুতরাং আচরণটি Crtl-A c এর মতো নয় এবং কমান্ডটি চালান
অন্য একটি পার্শ্ব প্রতিক্রিয়া হ'ল আপনি 2 কমান্ড চেইন করতে পারবেন না


screen সবসময় শেষ হয় যখন কমান্ড যা দিয়ে চালু ছিল প্রান্ত - এটা হাতিয়ার একটি স্বাভাবিক বৈশিষ্ট্য :) ..so যদি আপনি চালাতে screen top, যখন আপনি প্রস্থান top, screen, প্রস্থান করা হবে খুব
ওয়ারেন

হ্যাঁ আমি এখনই, এই কারণেই আমি স্ক্রিনটিকে ডিমন হিসাবে চালু করার চেষ্টা করেছিলাম তবে এক্সিকিউট ব্যবহার করুন এবং তার পরে একটি নতুন উইন্ডো খুলতে পর্দার কমান্ডটি ব্যবহার করুন (শেল লচিং)। আমিও Exec এবং লেজ বা স্ক্রিন মধ্যে মধ্যে Tu শুরুতে যোগ ব্যাশ চেষ্টা এবং বলতে কিন্তু কেউই কাজ করছে
ব্যাসার্ধ

উত্তর:


14

screen -S test -X screen commandকমান্ড আপনি আপনার ডেমন সেশনের জানালা যোগ করতে হবে, তবে অন্যতম কারণ আপনি দিতে নয়। এটি কাজ করে কারণ-এক্স একটি শেল কমান্ড নয় একটি স্ক্রিন কমান্ড নেয় এবং উইন্ডো তৈরির জন্য স্ক্রিন কমান্ডকে বিভ্রান্তিকরভাবে স্ক্রিন বলা হয়। কোনও এক্সিকিউটিভ স্ক্রিন কমান্ড নেই। শেল স্ক্রিপ্টিং (যেমন screen -S script -X screen sh -c 'command1; command2;':) ব্যবহার করে আপনার কমান্ডটি তৈরি না করা পর্যন্ত কোনও শৃঙ্খলাবদ্ধ নেই ।

screen -S test -X screenকোনও কমান্ড না দিয়ে কল করা নিষ্ক্রিয় কারণ ডিফল্ট কমান্ডটি একটি শেল এবং একবার আপনি শেল তৈরি করে ফেললে, আপনার শেলের ভিতরে কমান্ড চালানোর জন্য একটি অবিচ্ছিন্ন (এবং অ-বিচক্ষণ) উপায় থাকে না। ইন্টারেক্টিভ শেল ছাড়াই কমান্ডটি নিজে চালানো ভাল। একটি পার্শ্ব প্রতিক্রিয়া হ'ল কমান্ডটি প্রস্থান করার পরে, স্ক্রিন উইন্ডোতে আর কোনও শিশু নেই এবং বন্ধ হয়ে যাবে।

কমান্ডটি বন্ধ হয়ে যাওয়ার পরে, আপনি উইন্ডোটি যেভাবেই খোলা রাখতে পর্দা জিজ্ঞাসা করতে পারেন। এটি zombieসক্ষম করতে স্ক্রিন কমান্ডটি ব্যবহার করুন । আপনার ক্রমটি দেখে মনে হচ্ছে:

screen -d -m -S script
screen -S script -X zombie qr
screen -S script -X screen tail -f /var/log/messages
screen -S script -X screen tail -f /var/log/xinetd.log

ইন্টারেক্টিভভাবে পুনরায় যোগাযোগ করতে:

screen -S script -r

এবং অবশেষে, আপনি পরিবর্তে স্ক্রিনসিআর স্ক্রিপ্ট হিসাবে এই-এক্স কমান্ডগুলি পুনরায় লিখতে পারেন।

Screenrc:

zombie qr
screen tail -f /var/log/messages
screen tail -f /var/log/xinetd.log

লিপি:

screen -d -m -S script -c screenrc

হ্যাঁ আমি জানি যে -এক্স একটি স্ক্রিন কমান্ড নিচ্ছে, আমি যখন বলছিলাম তখন আমি কী বোঝাতে চাইছি "চেইনিং স্ক্রিন কমান্ড (এক্স-এর পরে একটি)" (ঠিক আছে এটি মোটেও পরিষ্কার নয়) তবে সেখানে একটি স্ক্রিন এক্সিকিউট কমান্ড রয়েছে, লোকটিকে দেখুন পৃষ্ঠা, তবে আপনি যেমন বলেছিলেন যে এটি নন-ইন্টারেক্টিভ মোডে চেয়েছিল তেমন কাজ করার কোনও উপায় নেই। যাইহোক যাইহোক আলেকসডি সমাধান এবং আপনি জম্বি কমান্ড যুক্ত করে আমি যা চাই তা পেয়েছি! আপনাকে ধন্যবাদ
ব্যাসার্ধ

@ তোবু: জম্বিদের উল্লেখ করার জন্য +200! আমি চূড়ান্তভাবে কখনই সেই ভয়ঙ্কর ম্যানুয়ালটিতে লক্ষ্য করতাম না!
দ্রাক্ষালতা

6

আপনি যদি সেই একই প্রভাব দেখতে চান Ctrl-A cতবে এর screenপরিবর্তে আপনার ব্যবহার করা উচিত exec:

স্ক্রিন-এস পরীক্ষা-এক্স স্ক্রিন লেজ -f / var / লগ / বার্তা
স্ক্রিন-এস পরীক্ষা-এক্স স্ক্রিন
স্ক্রিন-এস পরীক্ষা-এক্স স্ক্রিন টেল -f /var/log/xinetd.log

এছাড়াও, যখন আপনি নির্দিষ্ট স্ক্রিন সেশন তৈরি করতে চান আপনি উপরের কমান্ডগুলি $HOME/.screenrc-younameitফাইলের ( screen -S test -Xউপসর্গ ব্যতীত) ফাইল করতে এবং লঞ্চ screen -c $HOME/.screenrc-younameitকরতে পারেন।


Ctrl-A c আমার ২ য় লাইনে রয়েছে, আমার ধারণা, এক্সিকিউট কাজ করছে না কারণ বর্তমান উইন্ডোতে এক্সিকিউট কমান্ডটি চালায় যা স্ক্রিনটি বিচ্ছিন্ন হওয়ার পরে সংজ্ঞায়িত করা যায় না। আপনার কাজের চেইন স্ক্রিন এবং কমান্ডটি দুর্দান্ত, আমার এটি চেষ্টা করা উচিত ছিল! আমি নিজের কাছে একটি উত্তর যুক্ত করব কারণ আপনার উত্তরটির অধিবেশন তৈরির অভাব রয়েছে এবং একটি অকেজো লাইন রয়েছে (২ য়
ব্যাসার্ধ

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

1

বাইবুকে কোন বিকল্প ব্যবহার করছেন ?


আমি কেবল এটি চেষ্টা করে দেখছি, এটি কীভাবে সাহায্য করতে পারে তা আমি দেখতে পাচ্ছি না তবে আপনার যদি বাইউবু দিয়ে একটি কার্যক্ষম সমাধান পাওয়া যায় তবে এটি ঠিক হতে পারে, আমি বরং কেবল একটি পর্দার সমাধান সমাধান পছন্দ করি তবে সমাধান না হওয়ার চেয়ে অ্যাড ব্যবহার করা ভাল!
ব্যাসার্ধ

1

আমি আজ রাতে একই জিনিস করছি, আমি বেশ কয়েকটি ফাইল প্রাক-খোলার সাথে পর্দা খুলতে চেয়েছিলাম। এই সমস্তগুলি বের করতে আমার কিছুটা সময় লেগেছে তবে আমি অবশেষে নিম্নলিখিতগুলি নিয়ে এসেছি যা বেশ সুন্দরভাবে কাজ করছে বলে মনে হচ্ছে:


#1/bin/sh 
screen -d -m -S CS140 
screen -S CS140 -X screen -t thread.c 
screen -p 1 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/thread.c\015"'
screen -S CS140 -X screen -t thread.h 
screen -p 2 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/thread.h\015"'
screen -S CS140 -X screen -t palloc.c 
screen -p 3 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/palloc.c\015"'
screen -S CS140 -X screen -t intr-stubs.h 
screen -p 4 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/intr-stubs.h\015"'
screen -S CS140 -X screen -t pagedir.c 
screen -p 5 -S CS140 -X eval 'stuff "vim cs140-ps2/src/userprog/pagedir.c\015"'
screen -r -d CS140 

এটি বিভিন্ন ফাইল খোলার 1-5 স্ক্রিন সহ ছয়টি বিভিন্ন স্ক্রিন তৈরি করবে। আমি সমস্ত নির্দিষ্টকরণ জানি না তবে 'স্টাফ' অবশ্যই স্ক্রিনকে জানায় নীচের উদ্ধৃত পাঠ্য কোনও স্ক্রিন কমান্ড নয়। 'ইভাল' এর পরে উদ্ধৃতিগুলিতে থাকা সমস্ত কিছুকে ব্যাখ্যা করে। এটি ছাড়া screen -p 4 -S CS140 -X stuff "vim cs140-ps2/src/threads/intr-stubs.h\015" কেবল উদ্ধৃত পাঠ্যটি কার্যকর না করে পাইপ দেয়। ইভাল একটি নতুন লাইন হিসাবে '\ 015' পড়বে এবং এভাবে পূর্ববর্তী পাঠ্য সম্পাদন করবে।

অন্যান্য বিবরণের ক্ষেত্রে screen -p 1 -S CS140 -X CMD শেলটিকে 'সিএসডি 40' নামক স্ক্রিন সেশনের প্রথম উইন্ডোতে 'সিএমডি' প্রেরণ করতে বলে।

আশা করি এইটি কাজ করবে!

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