আমি কীভাবে এমন একটি স্ক্রিপ্ট তৈরি করতে পারি যা টার্মিনাল উইন্ডো খোল এবং সেগুলিতে আদেশগুলি কার্যকর করে?


140

আমার উবুন্টু মেশিনটি চালু করার সময় আমার তিনটি স্ক্রিপ্ট চালানো দরকার, সেগুলি আমার উন্নয়নের পরিবেশে আমি পরিষেবাগুলি শুরু করি।

এটি করতে আমি নিজে তিনটি টার্মিনাল খুলি এবং কমান্ডগুলি টাইপ করি।

এমন কোনও স্ক্রিপ্ট তৈরি করার কোনও উপায় আছে যা তিনটি টার্মিনাল খুলবে এবং এর প্রতিটিটিতে একটি কমান্ড কার্যকর করবে? (প্রতিটি কমান্ড পৃথক টার্মিনাল উইন্ডোতে থাকা উচিত যাতে আমি তাদের আউটপুট দেখতে পারি)।

উত্তর:


138
gnome-terminal -e command

অথবা

xterm -e command

অথবা

konsole -e command

যথেষ্ট

terminal -e command

কমান্ডটি প্রস্থান করার সাথে সাথে টার্মিনালটি স্থির রাখতে:

কনসোলে একটি --nocloseপতাকা রয়েছে।

এক্সটার্মে একটি -holdপতাকা রয়েছে।

ইন gnome-terminal, সম্পাদনা -> প্রোফাইল পছন্দসমূহ -> শিরোনামে যানকমান্ড ট্যাবে ক্লিক করুন । ড্রপ-ডাউন মেনু থেকে টার্মিনালটি হোল্ড নির্বাচন করুন যখন কমান্ডটি প্রস্থান হবে । আপনার এটির জন্য একটি নতুন প্রোফাইল তৈরি করা উচিত এবং এর সাথে চালানো উচিত

জিনোম-টার্মিনাল - উইন্ডো-সহ-প্রোফাইল = NAMEOFTHEPROFILE -e কমান্ড

1
আমি যদি টার্মিনালটি ধরে রাখার চেষ্টা করি তবে আমি "স্ট্যাটাস কোড 127 সহ শিশু প্রক্রিয়াটি স্বাভাবিকভাবেই প্রস্থানিত" পাই
দর্শন চৌধুরী চৌধুরী

2
জিনোম-টার্মিনালের শিরোনাম বিকল্প আর নেই :(
törzsmókus

1
@ törzsmókus সত্যিই এটি 2017! এলটিএস প্রকাশে 5 বছরের সাপোর্ট লাইফ রয়েছে। 14.04 এপ্রিল 2019 পর্যন্ত শেষ হয় না w
wiki.ubuntu.com/

1
gnome-terminal -e commandcommandউদ্ধৃত হয় শুধুমাত্র যদি কাজ করে । তাই এই কাজ করে না: gnome-terminal -e "echo hello world; sleep 3"কিন্তু এই আছে: gnome-terminal -e "bash -c 'echo hello world; sleep 3'"। দীর্ঘশ্বাস.
বিগুডার

3
; $SHELLকমান্ডের শেষে যুক্ত করে আপনি জিনোম-টার্মিনালটি উন্মুক্ত রাখতে পারেন । উদা:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
গ্যাব্রিয়েল স্ট্যাপলস

58

হার্ড কোডিং পরিবর্তে gnome-terminal, konsoleইত্যাদি ইত্যাদি, বিকল্প সিস্টেমটি ব্যবহার করুন। যে প্রোগ্রামটি ডিফল্ট টার্মিনাল এমুলেটর কার্যকর করে তা হ'ল:

x-terminal-emulator

আমার সিস্টেমে, আমি যখনই এই কমান্ডটি প্রয়োগ করি তখন এটি কনসোলের একটি নতুন উদাহরণ খুলবে।

সৌভাগ্য যে, টার্মিনাল সমর্থন করার জন্য মনে হয় -eকমান্ড (আমি তা যাচাই নির্বাহ জন্য বিকল্প konsoleএবং gnome-terminal)। কমান্ডটি চালিত কমান্ডে প্রেরণের পরে যুক্তিগুলি। বাশ আমার টার্মিনালে খোলা থাকতে অস্বীকার করেছেন, টার্মিনাল পেতে অতিরিক্ত স্ক্রিপ্টের প্রয়োজন:

#!/bin/sh
"$@"
exec "$SHELL"

আপনি যদি পূর্ববর্তী স্ক্রিপ্টটিকে হিসাবে সংরক্ষণ করে /home/user/hackyএবং সম্পাদনযোগ্য করে তুলে ধরে থাকেন তবে আপনি আপনার স্ক্রিপ্টগুলি এতে চালাবেন:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

সম্পূর্ণ পাথ প্রয়োজন এবং /home/user/hackyসম্পাদনযোগ্য হতে হবে has

একটি নতুন টার্মিনাল উইন্ডোতে স্ক্রিপ্ট চালানোর আমার আগের প্রয়াসটি # 2 সংশোধনীতে পাওয়া যাবে , আমি বুঝতে পেরেছিলাম যে যুক্তিগুলি পাস করা যেতে পারে x-terminal-emulator


এই ক্ষেত্রে, এটি প্রশ্নকারীর পক্ষে এমন কিছু করতে সহায়তা করবে না যা সমস্ত টার্মিনালের জন্য একই নয়।
নিকগুলেটস্কি

প্রচেষ্টা # 3: এটির উচিত টার্মিনালটি খোলা রাখা এবং optionচ্ছিক যুক্তি দিয়ে প্রোগ্রামটি চালানো উচিত।
লেকেনস্টেইন

1
আমি জিনোম বিকল্পটি ব্যবহার করেছি, তবে আমি একবার আমার স্ক্রিপ্টটি চালালে প্রধান টার্মিনালটি বন্ধ হয়ে যায় !! .. কোন ধারণা কেন?
ম্যাকলান 20'15

3
@ Suda.nese এটি নকশা অনুসারে, "টার্মিনাল" স্ক্রিপ্টটি সম্পাদন করা হয়ে গেলে এটি বন্ধ হয়ে যাবে কারণ এর চেয়ে বেশি কিছু করার নেই। আপনি শেলটি ব্যবহার করে এটি "ফিক্স" করতে পারেন যেখানে আপনি কমান্ডগুলি কার্যকর করতে পারেন ( bash) বা এর মতো একটি লাইন থাকতে পারে read -p "Press Return to continue"
লেকেনস্টেইন

1
আপনি কীভাবে টার্মিনালে একাধিক কমান্ড চালাতে পারেন? উদাহরণস্বরূপ cd xxx && start.sh। ব্যাখ্যাদাতা && কে কমান্ডের দ্বিতীয় অংশ হিসাবে (যা যৌক্তিক) দেখেছে, তবে যদি আমি এটি উদ্ধৃত করি, তবে এটি পুরো জিনিসটিকে একটি বড় যুক্তি হিসাবে কার্যকর করার চেষ্টা করে
রিচার্ড

9

অনেক সাধারনভাবে-

#!/bin/bash

/etc/init.d/ccpd status

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

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

অন্য পোস্টটি[] প্লেসহোল্ডার হওয়ার উদ্দেশ্যে

এখানে "NAMEOFEEPROFILE" এমন প্রোফাইলের নামের সাথে প্রতিস্থাপন করতে হবে যা "কমান্ডটি প্রস্থান করার সময় টার্মিনাল ধরে রাখে"।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


1
@ সিপ্রিকাস আমি বিশ্বাস করি []যে কেবল স্থানধারক ছিলেন
কার্তিক টি

বুঝেছি. তবে টার্মিনালটি আমাকে এত দ্রুত বন্ধ না করতে হবে make আমি অনুমান করি যে এটি লিঙ্কযুক্ত

@ সাইপ্রিকাস আপনি কি প্রোফাইলটি ব্যবহার করে দেখেছেন? আমি যা --window-with-profile=NAMEOFTHEPROFILEদিয়েছি তার সাথে কেবল যুক্ত করা দরকার
কার্তিক টি

1
@ সিপ্রিকাস আরও ভাল নির্দেশাবলী দেওয়ার জন্য আমাকে বাড়ি ফিরে যেতে হবে, তবে এই বিকল্পটি সেটটি সহ একটি বিশেষ প্রোফাইল তৈরি করা এবং উপরের জায়গায় বিশেষ প্রোফাইলের নাম ব্যবহার করা উচিত।
কার্তিক টি

2
@ সিপ্রিকাস যদি এটি আপনার পক্ষে যথেষ্ট হয় তবে তা ঠিক আছে। প্রোফাইল সেটিংসের গোষ্ঠী ছাড়া আর কিছুই নয়। আপনি কেবল আপনার স্ক্রিপ্টে ব্যবহারের জন্য সেটিংস সেটআপ করতে পারেন এবং এটি সমস্ত টার্মিনালে ব্যবহার করতে হবে না। আপনার সমস্ত প্রোফাইল দেখতে আপনি সম্পাদনা -> প্রোফাইল দেখতে পারেন এবং আপনার লিঙ্কযুক্ত পোস্টে বর্ণিত একটি সেটআপ সেখানে যুক্ত করবেন
কার্তিক টি

5

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

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

এখানে একটি স্বতন্ত্র উদাহরণ, যা একটিমাত্র ট্যাব খোলে, এটি "পরীক্ষা" শিরোনাম করে, তারপরে এর cd /etc; lsভিতরে সাধারণ কমান্ডটি চালায় । $SHELLশেষে অংশ খোলা থাকার যাতে আপনি তারপর তার আউটপুট দেখতে এবং এটি ব্যবহার চালিয়ে যেতে পারবেন শেল বাধ্য করে (আমি স্ট্যাক ওভারফ্লো উপর অন্য এই কোথাও শিখেছি):

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"

এখানে আরও জটিল উদাহরণ যা একই জিনোম-টার্মিনালে 3 টি পৃথক ট্যাব খুলবে। এটি আমার ডেস্কটপ শর্টকাটটি ঠিক ঠিক তেমন কাজ করে তাই আমি একবারে প্রোগ্রামিং উইন্ডোগুলির একগুচ্ছ খুলতে পারি:

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $SHELL'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $SHELL'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $SHELL'"

উপরে command আদেশটির একটি বিচ্ছেদ এখানে রয়েছে:

  • gnome-terminal = একটি জিনোম-টার্মিনাল খুলুন
  • --tab = পরবর্তী কিসের জন্য একটি অনন্য ট্যাব খুলুন
  • --title="tab 1" = এই ট্যাবটির শিরোনাম "ট্যাব 1"
  • --command="bash -c 'cd /etc; ls; $SHELL'"bash -c 'cd /etc; ls; $SHELL'কমান্ডটি চালান , যা একটি আদেশ হিসাবে আমি সবেমাত্র তৈরি করেছি; এখানে এটি কি করে:
    • bash -c এটি একটি বাশ 'সি'মন্ডড বলে
    • cd /etc = 'সি'হেঞ্জ' ডি 'ডিরেক্টরিটি "/ ইত্যাদি" পথে প্রবেশ করুন
    • ls = 'এই ডিরেক্টরিটির সামগ্রী নেই
    • $SHELL= এই ক্রিপ্টিক টিডবিটটি শেলটি খোলা রাখার জন্য প্রয়োজন যাতে আপনি এটির সাথে কাজ করতে পারেন। আপনি যদি শেলটি খুলতে চান, আপনার কমান্ডটি চালান, তারপরে বন্ধ করুন, কেবল এই অংশটি সরিয়ে দিন। আমি যাইহোক, ট্যাবটি উন্মুক্ত থাকতে চাই যাতে আমি প্রোগ্রামিং যাদু করতে পারি। :)
  • তারপরে আমরা --tabট্যাব 2 তৈরি করতে আবার অংশটি শুরু করি , তারপরে আবার ট্যাব 3 এর জন্য your আপনার হৃদয়ের সামগ্রীটিকে কাস্টমাইজ করুন।

স্ক্রীনশট:

এখানে চিত্র বর্ণনা লিখুন


1
খুশি আমি সহায়ক ছিলাম) আমার কাছে এমন স্ক্রিপ্টও রয়েছে যা আমি কেবল ক্লিক করতে এবং প্রকল্পে কাজ শুরু করতে পারি। তাদের সাথে দুটি সমস্যা ছিল: উদাহরণস্বরূপ সার্ভার ক্র্যাশের পরে প্রচুর টার্মিনাল উইন্ডোজ (তাদের জন্য সম্পূর্ণ পৃথক স্ক্রিন ছিল) এবং উইন্ডোজ বন্ধ হয়ে যায়। এই উত্তরটি আমার --tab + $ শেল দিয়ে আমার উভয় সমস্যার সমাধান করে। ভাল
গ্র্যাভানটোট

1

লেকেনস্টেইনের উত্তরের জন্য মন্তব্য করছি। আমি জানি এটি একটি পুরানো পোস্ট, তবে যে কেউ এই দরকারীটি খুঁজে পান (যেমন আমি ঠিক করেছি) পরিবর্তে আপনি যে স্ক্রিপ্টটি কল করছেন তার ভিতরে অন্য একটি "হ্যাকি স্ক্রিপ্ট" তৈরি করার পরিবর্তে

hacky_function()
{
"$@"
exec "$SHELL"
}

আপনার স্ক্রিপ্টটি এখানে "এক্স-টার্মিনাল-এমুলেটর -e / পাথ / টু / স্ক্রিপ্ট হ্যাকি-ফাংশন optionচ্ছিক আর্গুমেন্টগুলির সাথে কল করুন"

স্ক্রিপ্টের শেষে "$ @" রাখতে ভুলবেন না


-2

বিদ্যমান স্ক্রিন সেশন থেকে স্ক্রিন কমান্ড এবং -d বিচ্ছিন্ন ব্যবহার করুন , এবং এখানে পুনরায় সংযুক্ত করুন -আমি একটি নতুন স্ক্রিন সেশন জোর করে -S ডিফল্ট নাম ব্যবহার না করে একটি নামকৃত সেশন তৈরি করুন


এই উত্তরটি মোটেও পরিষ্কার নয়, দয়া করে আরও বোধগম্য হতে যত্ন করুন
আজরাফতী

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