ব্যাশে, আমি কীভাবে কোনও কমান্ডের সাথে একটি ফাংশন কী বাঁধব?


91

উদাহরণ: আমি F12কমান্ডের চাবিটি echo "foobar"এমনভাবে বাঁধতে চাই যে প্রতিবারই F12"foobar" বার্তাটি হিট করে পর্দায় মুদ্রণ করা হবে। আদর্শভাবে এটি কোনও বিল্টইনস নয়, কোনও যথেচ্ছ শেল কমান্ড হতে পারে। কিভাবে এই সম্পর্কে যায়?

উত্তর:


165

কমান্ড লাইনে Ctrl- vকমান্ড লাইনে চাপ দিয়ে কী দ্বারা নির্গত অক্ষরের অনুক্রমটি নির্ধারণ করতে পারেন , তারপরে আপনার আগ্রহী কীটি টিপুন my আমার সিস্টেমে F12, আমি পেয়েছি ^[[24~^[প্রতিনিধিত্ব করে Esc। বিভিন্ন ধরণের টার্মিনাল বা টার্মিনাল এমুলেটরগুলি একই কী এর জন্য বিভিন্ন কোড নির্গত করতে পারে।

বাশ প্রম্পটে আপনি কী ম্যাক্রো সক্ষম করতে এরকম একটি কমান্ড প্রবেশ করতে পারেন যাতে আপনি এটি ব্যবহার করে দেখতে পারেন।

bind '"\e[24~":"foobar"'

এখন, আপনি চাপলে F12, আপনি আরও সম্পাদনার জন্য প্রস্তুত কমান্ড লাইনে "ফুবার" পাবেন। আপনি যদি কমান্ডটি তত্ক্ষণাত একটি কমান্ড প্রবেশ করানোর জন্য কী-স্ট্রোক চান, আপনি একটি নতুন লাইন যুক্ত করতে পারেন:

bind '"\e[24~":"pwd\n"'

এখন আপনি যখন টিপুন F12, আপনি প্রেস না করে বর্তমান ডিরেক্টরিটি প্রদর্শিত পাবেন Enter। আপনি যদি ইতিমধ্যে লাইনে কিছু টাইপ করেছেন এবং আপনি এটি ব্যবহার করেন যা স্বয়ংক্রিয়ভাবে কার্যকর হয়? এটা অগোছালো হতে পারে। তবে আপনি আপনার ম্যাক্রোর অংশ হিসাবে লাইনটি সাফ করতে পারেন:

bind '"\e[24~":"\C-k \C-upwd\n"'

স্পেসটি নিশ্চিত করে যে ঘণ্টাটি বাজানো থেকে বাড়াতে Ctrl- uমুছার জন্য কিছু আছে।

একবার আপনি যেভাবে চাইছেন ম্যাক্রোটি কাজ করার পরে আপনি এটি আপনার ~/.inputrcফাইলে যুক্ত করে স্থির করতে পারেন । bindকমান্ড বা একক উদ্ধৃতিগুলির বাইরের সেটটির প্রয়োজন নেই :

"\e[24~":"\C-k \C-upwd\n"

সম্পাদনা করুন:

আপনি একটি কী বাঁধাইও তৈরি করতে পারেন যা বর্তমান কমান্ড লাইনটি বিঘ্নিত না করে কিছু কার্যকর করবে।

bind -x '"\eW":"who"'

তারপরে আপনি একটি কমান্ড টাইপ করার সময় একটি ব্যবহারকারীর নাম প্রয়োজন, উদাহরণস্বরূপ, এবং আপনাকে যে লগ ইন করা হয়েছে তাদের নামগুলি জানা দরকার, আপনি টিপতে পারেন Alt- Shift- Wএবং আউটপুট whoপ্রদর্শিত হবে এবং প্রম্পটটি পুনরায় জারি করা হবে আপনার আংশিক কমান্ড অক্ষত এবং লাইনে একই অবস্থানে কার্সার সহ।

দুর্ভাগ্যক্রমে, এটি কীগুলির জন্য সঠিকভাবে কাজ করে না F12যা দুটি অক্ষরের বেশি আউটপুট দেয়। কিছু ক্ষেত্রে এটি প্রায় কাজ করা যেতে পারে।

কমান্ড ( whoএই ক্ষেত্রে) যে কোনও নির্বাহযোগ্য - একটি প্রোগ্রাম, স্ক্রিপ্ট বা ফাংশন হতে পারে।


4
আমি যদি "সিটিআরএল + কিউ" তে একটি বন্ডিং যুক্ত করতে চাই তবে কী হবে?
কুবুদি

4
@kubudi: bind '"\C-q": menu-complete'উদাহরণস্বরূপ (অথবা আপনার ~/.inputrc: "\C-q": menu-complete)। stty -ixonআপনার ~/.bashrcপ্রবাহ নিয়ন্ত্রণ অক্ষম করতে এবং ^ এস এবং ^ কিউ উপলব্ধ করার প্রয়োজন হতে পারে ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আপনি বলছেন যে এটি ^[উপস্থাপন করে escএবং তারপরে আপনি এটির \eউদাহরণ হিসাবে দেখিয়েছেন। কেন আপনি দয়া করে ব্যাখ্যা করতে পারেন?
উন্মুলয়িতা

4
@ রিমোভার: ^[এটি আউটপুট প্রতিনিধিত্ব করে। \e(এক পথ প্রবেশ হয় ^[যে জন্য কাজ করে না)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আমি কীভাবে "z Cz" বাঁধতে পারি? আমি শিরুন.না.সি.
২০১৪ /

19

আপনি এতে বাশ কী বাইন্ডিংগুলি সংজ্ঞায়িত করতে পারেন ~/.inputrc(জিএনইউ রিডলাইন লাইব্রেরির জন্য কনফিগারেশন ফাইল)। বাক্য গঠনটি হ'ল

<কিজিয়াম বা কী নাম>: ম্যাক্রো

উদাহরণ স্বরূপ:

Control-o: "> output"

ম্যাক্রো তৈরি করবে যা "> আউটপুট" সন্নিবেশ করান যখন আপনি টিপুন ControlO

 "\e[11~": "echo foobar"

একটি ম্যাক্রো তৈরি করবে যা "আপনি ইকো ফুবার" সন্নিবেশ করান যখন আপনি টিপবেন F1... আমি জানিনা কীগুলির কীসিমটি F11হাতছাড়া।

সম্পাদনা করুন:

.inputrc\nলাইনফিডের জন্য পালানোর ক্রমটি বোঝে , তাই আপনি ব্যবহার করতে পারেন

 "\e[11~": "echo foobar\n"

যা কমান্ড জারি হওয়ার পরে কার্যকরভাবে 'এন্টার টিপুন'।


4
আপনি একটি নতুন লাইনের চরিত্র যুক্ত করতে ম্যাক্রোর মধ্যে "\ n" ব্যবহার করতে পারেন:
বার্টন চিত্তডেন

এটি আমার পক্ষে আরও ভাল কাজ করে কারণ এটি একটি টার্মিনাল খোলার মূল ম্যাপিংটি সংজ্ঞায়িত করে।
হেলড্রাগ

জন্য Alt, ব্যবহার \e, যেমন "\eo": "> output"
জোনিস এলমারিস


4
@ আর্থার হেনরিক ডিেলা ফ্রেগা আমি উত্তরটি সম্পাদনা করেছি; এটি আপনার হোম ডিরেক্টরিতে থাকবে। যদি এটি বিদ্যমান না থাকে তবে আপনি এটি তৈরি করতে পারেন।
বার্টন চিত্তেনডেন

7

এই সমাধানটি এক্স 11 এনভায়রনমেন্টের সাথে সুনির্দিষ্ট এবং ব্যাশের সাথে কিছুই করার নেই তবে নিম্নলিখিতটি আপনার .Xmodmaps এ যুক্ত করুন

 % loadkeys
 keycode 88 = F12
 string F12 = "foobar"
 %

F12 টি চাপলে টার্মিনালে "foobar" স্ট্রিংটি প্রেরণ করবে।


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

4
এটি দুর্দান্ত লাগবে, তবে ফেডোরা ২০ এর মতো কাজ করবে বলে মনে হয় না। এমনকি আমি প্রথমে এফ 12 এর জন্য সঠিক কীকোড সন্ধান করার জন্য xev ব্যবহার করার চেষ্টা করেছি (আমার ক্ষেত্রে, 96) এবং এটি 88 এর পরিবর্তে ব্যবহার করার চেষ্টা করেছি Ne উভয়ই কাজ করে না।
ববডুলিটল

2

আমি Ctrl+Bএকটি আদেশ আবদ্ধ করতে চেয়েছিলেন । উপরের উত্তরের দ্বারা অনুপ্রাণিত হয়ে আমি ব্যবহারের চেষ্টা করেছি bindতবে বুঝতে পারি না যে ক্রিপ্টিক স্কুইগলস ( \e[24~?) এর কোন সিরিজে অনুবাদ হয়েছে Ctrl+B

একটি ম্যাকের উপর, টার্মিনাল অ্যাপ্লিকেশানের সেটিংসে যান, প্রোফাইলগুলি -> কীবোর্ড -> +তারপরে আপনার পরে থাকা কীবোর্ড শর্টকাটটি টিপুন এবং এটি বেরিয়ে আসে। আমার জন্য Ctrl+Bফলাফল \002যা আমি সফলভাবে কমান্ড করতে বাধ্য

bind '"\002":"echo command"'

এছাড়াও, আপনি যদি কমান্ডটি সরাসরি-সম্পাদন করতে চান (কেবলমাত্র প্রম্পটে সন্নিবেশ করা হয়নি), আপনি আপনার কমান্ডের শেষে এন্টারটি যুক্ত করতে পারেন:

bind '"\002":"echo command\015"'

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