প্রোগ্রামটিমে জিনোম টার্মিনাল খুলুন এবং বাশার্ক কার্যকর হওয়ার পরে কমান্ডগুলি কার্যকর করুন


35

আমার দেব পরিবেশ শুরু করার জন্য আমি একটি ছোট স্ক্রিপ্ট লিখেছিলাম। একটি অংশ হ'ল এক জিনোম টার্মিনালটি কয়েকটি ট্যাব সহ খোলার যেখানে স্বয়ংক্রিয়ভাবে কিছু কমান্ড কার্যকর করা উচিত। এই কমান্ডগুলির মধ্যে কিছু ইতিমধ্যে কার্যকর করা .bashrc এর উপর নির্ভর করে। কিন্তু ব্যবহার করার সময়

জিনোম-টার্মিনাল --tab -e "কমান্ড" --tab --tab

কমান্ডটি কার্যকর করা হয়েছিল। একটি স্বয়ংক্রিয় জিনোম-টার্মিনাল তৈরি করার কোনও সম্ভাবনা আছে eআপনি নিজে ব্যবহার করা ব্যক্তির মতো আচরণ করুন? (এমনকি "সিডি / ফু / বার" এর মতো কমান্ডগুলি জিনোম-টার্মিনাল -e দিয়ে কাজ করে না)

উত্তর:


45

একবার জিনোম-টার্মিনাল বাশ শুরু করলে কমান্ড এক্সিকিউশন সম্পর্কিত যতটা লুপ চলে যায়: এটি কেবল ইনপুট এবং আউটপুট পরিচালনা করে। সুতরাং কিছু ~/.bashrcলোড হওয়ার পরে চালানোর জন্য আপনার বাশের সহযোগিতা প্রয়োজন ।

প্রথমত, অনেক ক্ষেত্রে আপনার পরে কমান্ডগুলি কার্যকর করার প্রয়োজন হয় না ~/.bashrc। উদাহরণস্বরূপ, কোনও নির্দিষ্ট ডিরেক্টরিতে টার্মিনাল খোলার মাধ্যমে এটি করা যায় cd /foo/bar && gnome-terminal। আপনি ঠিক একই ভাবে, বিভিন্ন পরিবেশের সেট করতে পারেন: VAR=value gnome-terminal। (যদি আপনার ~/.bashrcপরিবেশের ভেরিয়েবলগুলি ওভাররাইড করে তবে আপনি এটি ভুল করছেন: পরিবেশের পরিবর্তনশীল সংজ্ঞাগুলি অন্তর্ভুক্ত~/.profile )

টার্মিনালে কমান্ডগুলি কার্যকর করতে, তবে আগে ~/.bashrcআপনি করতে পারেন

gnome-terminal -x sh -c 'command1; command2; exec bash'

আপনি যদি একাধিক ট্যাব ব্যবহার করতে চান তবে আপনাকে তার -eপরিবর্তে ব্যবহার করতে হবে -x। জিনোম-টার্মিনাল -eশেল মাধ্যমে এটি সম্পাদন করার চেয়ে ফাঁকা জায়গাগুলির যুক্তিটি অনিচ্ছাকৃতভাবে বিভক্ত করে । তবুও, আপনি শেল কমান্ডটি লিখতে পারেন যদি আপনি এটিতে ফাঁকা স্থান অন্তর্ভুক্ত না করে তা নিশ্চিত করেন। কমপক্ষে জিনোম-টার্মিনাল ২.২26 সহ আপনি ট্যাব ব্যবহার করতে পারেন, যদিও ( <TAB>আক্ষরিক ট্যাব অক্ষর দ্বারা প্রতিস্থাপন ):

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

তোমার পরে কমান্ড চালানোর জন্য প্রয়োজন তা করেন তাহলে ~/.bashrc, মেক এটা কমান্ড চালানো। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি অন্তর্ভুক্ত করুন ~/.bashrc:

eval "$BASH_POST_RC"

তারপরে আপনার বাশার্কের পরে (সত্যিই শেষের দিকে) কিছু কোড চালানোর জন্য:

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

বা (উদ্ধৃতিতে কম ভারী)

BASH_POST_RC='command1; command2' gnome-terminal

যদিও আমি এটি বিশেষভাবে এটি করার পরামর্শ দিচ্ছি না, আপনি কমান্ড-লাইনে ইতিমধ্যে নির্দিষ্ট পাঠ্য সহ টার্মিনালটি কীভাবে শুরু করবেন তাতে উল্লিখিত কৌশলগুলিতে আগ্রহী হতে পারেন ?


হ্যাঁ, সত্যিই একটি দুর্দান্ত কৌশল। কখনও ভেবে দেখিনি। এখন আমি অবশ্যই নির্দিষ্ট ট্যাবটির জন্য আলাদাভাবে BASH_POST_RC ভেরিয়েবল সেট করার একটি উপায় খুঁজে বের করতে পারি। এবং এটি এখনও একটি সমস্যা বলে মনে হচ্ছে। একটি সাধারণ "জিনোম-টার্মিনাল --tab -e 'BASH_POST_RC = ls' --tab" সম্ভব নয় :-(
জারদোজ

@ জর্দোজ: আসলে আপনি ট্যাব অক্ষর ব্যবহার করে জিনোম-টার্মিনালটি চালনা করতে পারেন (আমার সংশোধিত উত্তর দেখুন)। উদ্ধৃত করার একাধিক স্তর মনে রাখবেন।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

.. এটি কাজ করে :-) ... আপনার সমাধান এবং আপনার ধৈর্য জন্য অনেক ধন্যবাদ। এখানে আমার সম্পূর্ণ কমান্ড (কমান্ডের সেই ফাঁকাগুলির সাথেও কাজ করে: জিনোম-টার্মিনাল - ক্রিয়াকলাপ-ডিরেক্টরি = "/ হোম / জার্ডোজ / প্রকল্পগুলি / আমার_রেইস_অ্যাপ" --tab -e 'বাশ-সি "এক্সপোর্ট BASH_POST_RC = \" রেল সার্ভার b "; এক্সিকিউশন ব্যাশ" "--tab -e 'বাশ -c" রপ্তানি BASH_POST_RC = \ "স্বতঃবৃদ্ধ \"; এক্সিকিউশন বাশ "" --tab
জারদোজ

অবশেষে এটি কার্যকর করে তুলেছে ... পুরো রাস্তাগুলির উদ্ধৃতি দিয়ে অনেক পরীক্ষার পরে। এখানে আমার, zsh ব্যবহার করে এবং একবারে একটি সার্ভার এবং একটি কনসোল খোলার:gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
আগস্টিন রিডিংগার

1
@ ইটারডন নো, একেবারেই শাঁস লাগবে না gnome-terminal -e। আপনি যদি চালান gnome-terminal -e 'sleep 9', sleepএটি আর্গুমেন্ট সহ কমান্ডটি কার্যকর করে 9এবং কোনও শেল জড়িত থাকে না। যদি আপনি নির্বাহ করেন gnome-terminal -e 'sleep 9;bash'তবে টার্মিনালটি খোলার সাথে সাথেই বন্ধ হয়ে যায়, কারণ এটি sleepঅভিযোগ করে যে 9;bashএটি কোনও বৈধ সময় অন্তর নয়। কী চলছে তা আপনি পর্যবেক্ষণ করতে পারেনstrace -f -eexecve gnome-terminal -e …
গিলস '

6

আপনি যখন -eবিকল্পটি ব্যবহার করবেন তখন gnome-terminalনতুন শেলটি gnome-terminal -e geditনা চালিয়ে এই কমান্ডটি চালানো হবে (আপনি এমন কিছু চালাতে পারেন :), তাই আপনি যদি bashশেলটিতে একটি নতুন টার্মিনাল / ট্যাবে একটি কমান্ড চালাতে চান তবে আপনাকে এই জাতীয় কিছু করতে হবে:

gnome-terminal -x bash -c "command"

তবে মনে রাখবেন "command"টার্মিনাল / ট্যাবটি শেষ হয়ে গেলেও শেষ হবে।


1
আমি মনে করি আপনি বোঝাতে চেয়েছেন gnome-terminal -x bash -c "command"( -eএকক যুক্তি প্রত্যাশা করে)। এবং পরে কোনও শেল চালানো মোটামুটি সহজ command, যতক্ষণ না আপনি একটি ট্যাব শুরু করছেন - আমার উত্তর দেখুন
গিলস 'অশুভ হওয়া বন্ধ করুন'

gnome-terminal -x "bash" -c "command"আমার জন্য কাজ। -X আরগ মানের উপর নোটের উদ্ধৃতি।
এম

আমি পেতে # Option “-x” is deprecated and might be removed in a later version of gnome-terminal.`
MrCholo

1
দয়া করে, -xএবং -eঅপ্টনগুলি হ্রাসের পরে আমরা কী করব ???
nyxee

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