একাধিক টার্মিনাল ট্যাব খোলা এবং কমান্ড চলমান


9

আমার একাধিক টার্মিনাল ট্যাব খুলতে হবে, তাদের শিরোনাম দিতে হবে, একটি ডিরেক্টরিতে যেতে হবে এবং প্রতিটি ট্যাবকে একটি কমান্ড চালানো দরকার।

আমি Linux এবং শেল স্ক্রিপ্টিং নতুন am, অনলাইন অনুসন্ধান এবং কিছু সমাধান পরীক্ষণ পর, আমি এই স্ক্রিপ্ট (প্রণীত সম্পাদিত নিচে উত্তর উপর ভিত্তি করে):

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'rails s'"
titles[1]="Server"

cmds[2]="'rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

এটি ট্যাবগুলি খোলে, তাদের নাম দেয়, তবে এই ত্রুটিটি উত্পন্ন করার জন্য আদেশগুলি কার্যকর করতে ব্যর্থ হয়:

এই টার্মিনালের জন্য শিশু প্রক্রিয়া তৈরি করতে একটি ত্রুটি হয়েছিল

আর একটি অসুবিধা হ'ল আমি যদি চলমান কমান্ডটি বন্ধ করে রাখি তবে এটি ট্যাবটি বন্ধ করে দেয় যা আমি চাই না। কমান্ডটি থামাতে এবং একই ট্যাবটির মধ্যে এটি আবার চালানো দরকার।

স্ক্রিপ্টে কী ভুল? এটি করার আরও সহজ উপায় আছে?

দ্রষ্টব্য: আমি যদি কমান্ড থেকে (-e "\" bash -c $ {cmds [i] b; bash \ "") অংশটি সরিয়ে ফেলেছি তবে এটি প্রদত্ত ডিরেক্টরিতে থাকা ট্যাবগুলি খুলবে এবং কোনও ত্রুটি ছাড়াই নাম রাখবে।

-Edit-1:

নীচে @ টুকুনটক্স উত্তরটি প্রয়োগ এবং স্ক্রিপ্ট সম্পাদনার পরে, ত্রুটিটি আর উপস্থিত হয় না, তবে এটি আমাকে দেয় bash: rails c: command not foundএবং rails sরেল সার্ভার শুরু করার পরিবর্তে একটি নতুন রেল অ্যাপ তৈরি করে, আমি এই ফোল্ডারটি একবার অ্যাক্সেস করার পরে একটি রত্ন নির্বাচন করতে .rmvrc ব্যবহার করছি ।


আপনি যদি নিজের স্ক্রিপ্টটি আপনার উবুন্টু বুটে চালাতে চান: - আপনি আপনাকে একটি আপস্টার্ট পরিষেবা ( help.ubuntu.com/commune/UbuntuBootupHowto ) হিসাবে বা স্ক্রিপ্ট চালাতে পারেন : আপনার ডেস্কটপ পরিবেশে "স্টার্টআপ অ্যাপ্লিকেশন" ব্যবহার করে
অ্যাবয়েলনুর

যদি আমি cmds[1]="'ping 192.168.9.9'"এটি লিখি তবে আমাকে একই ত্রুটি দেয় তবে আমি একক উদ্ধৃতি সরিয়ে সমাধান করেছি। সুতরাং আমি লিখি cmds[1]="ping 192.168.9.9"এটি কাজ করে।
ডেইজি

@ ব্র্যারি কিন্তু আমি বুঝতে পারছি না কেন এটি তিনটি ট্যাব খুলবে - একটি ডিফল্ট এবং অন্য দুটি স্ক্রিপ্টে সেট করুন। কারণ আমরা সংজ্ঞায়িত করি tab=" --tab-with-profile=Default"??
ডেইজি

উত্তর:


3

আমি এটি ব্যবহার tmuxকরার পরামর্শ দিচ্ছি tmuxinator, এটি আপনার পক্ষে কাজ করবে এবং আপনি terminatorখুব বেশি লেআউটেও নির্ভর করতে পারবেন !

জন্য terminatorবিন্যাস চেকআউট mhnagaoka এর উত্তর এখানে askubuntu খুব:

  1. আপনার বিন্যাসটি সেট আপ করার পরে, কোনও টার্মিনাল পটভূমিতে ডান ক্লিক করুন এবং পছন্দসমূহলেআউট ট্যাবটি নির্বাচন করুন এবং অ্যাড বোতামটি ক্লিক করুন ।

  2. এটি একটি নাম দিন এবং ক্লোজ করুন

  3. এটি উল্লিখিত ~/.config/terminator/configফাইলটি তৈরি করা উচিত ।

  4. এখন আপনি সংরক্ষিত লেআউট ব্যবহার ব্যবহার টারমিনেটর শুরু করতে পারেন: terminator -l yourLayout(প্রতিস্থাপন yourLayout যাই হোক না কেন সঙ্গে আপনি পদক্ষেপ 2 বেছে নেওয়া হয়েছে)।

  5. (ঐচ্ছিক) সম্পাদনা ~/.config/terminator/configফাইল যাতে এটা বলছেন যেখানে [layouts]এবং এটি নিচে নেস্টেড [[yourLayout]], নামান্তর yourLayout করার ডিফল্ট এবং সরান / পূর্ববর্তী নামান্তর ডিফল্ট বিন্যাস। এখন, যখন টার্মিনেটরটি কোনও পরামিতি ছাড়াই শুরু হয়, এটি আপনার কাস্টম [[default]]বিন্যাস লোড করবে !


2

অন্যান্য উত্তর এবং তাদের মন্তব্যগুলির কয়েকটি সংক্ষিপ্ত করতে, আমি এখানে যা শেষ করেছি তা এখানে:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

নোট করুন যে আমি 'মাস্টার' ট্যাব এবং প্রোফাইলগুলি এবং শিরোনামগুলি (যা অবনমিত বলে মনে হচ্ছে gnome-terminal) কেড়ে নিয়েছি ।


$tab -e... Option “-e” is deprecated and might be removed in a later version of gnome-terminal.অপশনগুলি শেষ করতে "-" - এর আউটপুট ব্যবহার করে এবং কমান্ড লাইনটি কার্যকর করার জন্য এটি প্রয়োগ করে। . that's an output but the comands get executed. When i use $ ট্যাব - command কমান্ডটি কার্যকর হয় না এবং টার্মিনালটি ডিসপ্লে করে:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
nyxee

1

এটা চেষ্টা কর:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

অন্যথায় -e এর পরে সম্পূর্ণ এক্সপ্রেশন কমান্ড হিসাবে ব্যাখ্যা করা হবে।

এর -icপরিবর্তে .bashrc ব্যবহারের উপকরণগুলি অন্তর্ভুক্ত করতেc


ত্রুটি আর উপস্থিত হয় না, ধন্যবাদ। তবে এটি আমাকে দেয় bash: rails c: command not foundএবং 'রেল গুলি' রেল সার্ভার শুরু করার পরিবর্তে একটি নতুন রেল অ্যাপ তৈরি করে। এটি প্রশ্নের ক্ষেত্র পরিবর্তন করে, আমি স্ক্রিপ্টের জন্য আপনার সংশোধন করে এটি সম্পাদনা করব
ব্র্যারি

আপনি যদি rails cঅন্য কিছু না করে টার্মিনালে চেষ্টা করেন তবে এটি কাজ করে? সম্ভবত এটি করা উচিত rails -c?
টুকসন

চেষ্টা করেছিলাম যে কাজ হয়নি। আমি এমনকি চেষ্টা করেছিলাম rvm list gemsetsএবং এটি বলেছে যে প্রথম ট্যাবে No command 'rvm' foundএকই কমান্ডটি চালান যা rvm list gemsetsকোনও আদেশ না চালিয়ে খোলে এবং এটি কাজ করে! পরিবেশ লোড হওয়ার আগে এবং .rvmrc ফাইলটি লোড হওয়ার আগে কি এটি কমান্ডটি চালায়?
ব্রেইরি

1

আপনি যে যুক্তিটি -e অপশনটি দিচ্ছেন তা হ'ল "bash -c command; bash"উদ্ধৃতি সহ। এটি সেই পুরো স্ট্রিংকে একটি কমান্ডের নাম হিসাবে ব্যাখ্যা করে! পরিবর্তে চেষ্টা করুন: -e "bash -c 'command ; bash'"। এইভাবে আপনার টার্মিনাল উইন্ডোতে যা চালিত হয় তা হ'ল commandএবং তারপরে রান করার পরে আপনাকে একটি কন্যার শেল দেওয়া হবে, যা আমি ধরে নিই যে আপনি চান। ঘটনাচক্রে, আপনি এটিও বলতে পারেন 'command & bash'; এটি পটভূমিতে কমান্ডটি চালাবে এবং আপনাকে এখনই কন্যার শেল দেবে।


আমি এই পরিবর্তিত options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )মধ্যে options+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )এবং এটা আমার একই ভুল দিলেন .. আমি এটা সঠিক করছি?
Brary

একেবারে সঠিক নয়: দ্বিতীয় ব্যাশের পরে 'প্রথম বাশের আগে and "এবং' after" পরে মুছে ফেলুন।
সিলভিও লেভি

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