bash: কমান্ডলাইনে প্রদত্ত কমান্ড কার্যকর করুন এবং প্রস্থান করবেন না


13

আমি কীভাবে বাশের কম্যান্ডলাইনে একটি কমান্ড নির্দিষ্ট করব যা b / .bashrc পড়ার পরে নতুন ব্যাশের অভ্যন্তরে একবার কার্যকর করা হবে - তবে কমান্ডটি শেষ হওয়ার পরে বাশকে প্রস্থান না করে এই সমস্ত?

আমি টার্মিনেটরের জন্য "বুট-আপ-কনফিগারেশন" দিয়ে ঘুরে বেড়াচ্ছি যেখানে কিছু বিভাজন শুরু হওয়ার পরে কিছু অ্যাপ্লিকেশন (ভিএম, মুট, ইরসি) শুরু করা উচিত। তবে আমি এখনও পটভূমিতে স্বাভাবিক শেলগুলি চাই (সিটিআরএল-জেড এবং আরও ...) তাই কোনও অ্যাপ্লিকেশন ছাড়ার পরে আমার কাছে একই শেলটি ছিল যা আমার আবেদনকালীন সময়ে ছিল ...

আমার জন্য কি কাজ করে না (প্রদত্ত উত্তরের ভিত্তিতে)

 ( bash; vim )              # vim waits for the exit of bash...
 bash -c vim                # bash exits after vims exit...
 bash -c 'vim; exec bash'   # bash is executed _after_ vim... ctrl-z won't work
 echo vim | bash -s         # "Vim: Warning: Input is not from a terminal"     

অস্থায়ী বাশার্কে ম্যানুয়ালি "vim" সংযোজনও কার্যকর হয় না। ভিএম সঠিকভাবে শুরু হয়, তবে এখনও কোনও পটভূমি ব্যাশ উপস্থিত নেই যেখানে কোনও সিটিআরএল-জেড আমাকে আনবে।

কোনও পরামর্শ?

উত্তর:


4

আমি মনে করি এটি সমাধানের কোনও উপায় খুঁজে পেয়েছি যাতে কাজের নিয়ন্ত্রণ কাজ করে:

bash --rcfile <(বিড়াল $} হোম} /। bashrc; প্রতিধ্বনি 'রফতানি করুন PROMPT_COMMAND = "ভিআইএম; রফতানি করুন

এটি ফ্লাইতে কাস্টম বাশার্ক ফাইল তৈরি করে এবং ভিএম শুরুতে বিলম্ব করতে PROMPT_COMMAND ভেরিয়েবল ব্যবহার করে যাতে কাজের নিয়ন্ত্রণ কাজ করা উচিত। এটি অবশ্যই ভিম নির্দিষ্ট না হয়ে সাধারণীকরণ করা যেতে পারে।

ঠিক আছে, এটি কেবলমাত্র টার্মিনেটরের মাধ্যমে পরীক্ষা করা হয়েছে এবং কমপক্ষে কনফিগার ফাইলের সাথে কাজ করছে বলে মনে হচ্ছে:

[profiles]
[[default]]
    use_custom_command = True
    custom_command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="vim; export PROMPT_COMMAND="') -i"

অনেক ধন্যবাদ. আমি unset PROMPT_COMMANDবরং তার চেয়ে বেশি পছন্দ করি export PROMPT_COMMAND=
পিক

2
bash -c 'vim; exec bash'

exec bashএকটি নতুন এক সঙ্গে বর্তমান ব্যাশ উদাহরণস্বরূপ প্রতিস্থাপন করবে।


1
HM হাঁ ... এই সমাধান "খালি বিভক্ত প্রস্থান পরে" ইস্যু ... কিন্তু Ctrl-z- র এখনও কাজে না - ব্যাশ কেবল মৃত্যুদন্ড কার্যকর করা হয় আবার vims প্রস্থান পর ... আমি তেজ প্রয়োজন ভিতরে ব্যাশ
marvin2k

1
আমি এই ফর্মটি ব্যবহার করে চলেছি এবং কেবল লক্ষ্য করেছি যে এটি ব্যবহার করার সময় এটি এলিয়াস ইত্যাদির উত্তরাধিকারী হয় না exec bashexec bash --loginসহায়তা করে কিন্তু হিসাবে উল্লেখ করা হয়েছে যে এটি বাশের ভিতরে বাশ চালায় যা আমরা যা চাই তা আসলেই নয়।
অলটেঞ্জি

আসল সমাধান। কুৎসিত নয়। +1
অ্যান্ড্রু

2

(AB) ব্যবহার .bashrcহয় শুধুমাত্র ব্যবহারযোগ্য উপায়। 1 জেনারেশন অপ্রয়োজনীয়, তবে - কেবল একটি পরিবেশের পরিবর্তনশীলতে কমান্ড (গুলি) রাখুন এবং evalএটি:

  • আপনার শেষে নিম্নলিখিতটি রাখুন ~/.bashrc:

    [[ $startup_cmd ]] && {
        declare +x startup_cmd
        eval "$startup_cmd"
    }
  • এই কমান্ডটি শুরু করতে টার্মিনেটর কনফিগার করুন:

    env startup_cmd='vim' bash

1 আসুন "বাদাম ফাটানোর জন্য সি 4 ব্যবহার করুন" বাদ দিন।


দেখতে সুন্দর দেখাচ্ছে এবং প্রথম নজরে কাজ করুন ... বাশার্ককে সংশোধন করতে হবে, এর সাথে কি জীবন থাকতে পারে ... তবে যে কারণেই হোক, সিটিআরএল-জেড এখনও কাজ করে না - কোনও ধারণা? - কোন ধরণের আলমারিতে আমি সি 4 ভিত্তিক সমাধানটি খুঁজে পাব?
marvin2k

0

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

tmux new-session -d -s foo
tmux send-keys -t foo:0.0 "vim
"

0
bash --rcfile <(cat ${HOME}/.bashrc; echo 'trap vim 12'; echo 'echo $$>/tmp/foo'; echo '( sleep 1;kill -12 `</tmp/foo`; )' ) -i

ব্যবহারকারী ধন্যবাদ wor "জন্য মাছি কাস্টম bashrc ফাইল "!

অন্য গুরুত্বপূর্ণ অংশটি হ'ল " ফাঁদ ", একটি ব্যাশ-বিল্টিন:

  • উপরের ট্র্যাপ কমান্ডটি কেবল বাশ সিগন্যাল 12 প্রাপ্ত হলে উইমকে নির্বাহ করার জন্য সংজ্ঞা দেয়।
  • আরসিফাইল কার্যকর করার সময় পটভূমিতে রাখুন, একটি লুক্কায়িত কিল -১২ কমান্ডটি এক সেকেন্ড অপেক্ষা করে যাতে ব্যাশটি শুরু করা শেষ করতে পারে। আপনি যদি এটিকে বাদ দেন, ভিআইএম চলাকালীন কোনও সিটিআরএল-জেড আপনাকে একটি কার্যকরী শেলের মধ্যে ফেলবে না ।
  • তারপরে কিল কার্যকর করা হয় এবং এভাবে ভিএম শুরু হয় im
  • কিল প্রসেস আইডি / tmp / foo থেকে পড়ে সম্ভবত আরও মার্জিত উপায় আছে।
  • আমি সিটিআরএল-জেডও পরীক্ষা করেছিলাম এবং এটি প্রত্যাশার মতো কাজ করে।

যাইহোক, "টার্মিনেটর" যা আপনি উল্লেখ করেছেন তা কী তা আমার কোনও ধারণা নেই।

ব্যাশ এবং স্ক্রিন সহ সমাধানের সন্ধান করতে গিয়ে আমি এটি পেয়েছি।

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