Esc কী টিপে বাশ বিল্টিন কীভাবে প্রস্থান করবেন?


1

কীভাবে readচেপে বিল্টিন থেকে প্রস্থান করবেন Esc?

স্নিপেট উদাহরণ যা প্রতিক্রিয়া দেয় নাEsc :

#!/bin/bash
echo "Quit - press key Esc"
echo "Enter name :"
read

আমি জানি না এটি সর্বোত্তম সমাধান কিনা তবে আপনি ইকো দ্বারা মুদ্রিত পালানোর সাথে তুলনা করতে পারেনread <press ESC then ENTER>;[ "$REPLY" = "$(echo -e '\033')" ] && echo ESC
পাওলো

অপ্রত্যাশিত টোকেন কাছাকাছি বাক্য গঠন ত্রুটি ;'পড়া <ESC টিপুন তারপর প্রবেশ করান> [ "$ জনের উত্তরের" = "$ (প্রতিধ্বনি -e '\ 033')"] && প্রতিধ্বনি Esc '
দেব Dejv

মাফ করবেন আমি পরিষ্কার ছিলাম না, <চাপুন এসএস্ট করুন তারপর প্রবেশ করুন> এটি আপনার ক্রিয়া। এটি পরীক্ষা করুন এবং যদি এটি আপনার মতো কাজ করে তবে আমি উত্তর হিসাবে পোস্ট করব read;[ "$REPLY" = "$(echo -e '\033')" ] && echo ESC
পাওলো

উত্তর:


0

বাশে read -eরিডলাইন ব্যবহার করে। এটি প্রস্থান স্থিতি সহ প্রস্থান করবে 1যখন Ctrl+ Dকেবলমাত্র ইনপুট। সুতরাং আমরা যদি Escট্রিগার তৈরি করতে kill-whole-lineএবং তারপরে প্রেরণ করতে পরিচালিত হই \C-d, তবে এটি কৌশলটি করা উচিত।

আমি এই দুটি জিনিস ক্রমানুসারে একমাত্র কীস্ট্রোক করতে পারি না। আমি তবে kill-whole-lineঅন্য কীস্ট্রোকের সাথে আবদ্ধ হতে পারি এবং কীস্ট্রোকটি Escপ্রেরণ করতে পারি এবং \C-d:

set -o emacs
bind '"\C-w": kill-whole-line'
bind '"\e": "\C-w\C-d"'
read -e

আপনি যদি পরে readপ্রস্থান স্থিতি ফিরে পেতে চান তবে দ্বিতীয় বাঁধাইটি হ'ল:0Esc

bind '"\e": "\C-w\C-j"'

অথবা আপনি ইনপুট হিসাবে কিছু নির্দিষ্ট স্ট্রিং পাস করতে চয়ন করতে পারেন:

bind '"\e": "\C-w---interrupted---\C-j"'

বা Escসহজভাবে কাজ করুন Enter(ইনপুট গ্রহণ করুন):

bind '"\e": "\C-j"'    # no prior \C-w binding required for this

নোট করুন যে একাধিক দ্রুত Escস্ট্রোক কেবল কয়েকজন পালানোর চেয়ে বেশি । কিছু লোক দ্রুত Escগর্ভপাত বন্ধ করতে কয়েকবার চাপ দেয় । এই কারণে আপনি "\e\e"একই স্ট্রিংয়ের সাথে আবদ্ধ হতে চাইতে পারেন "\e"

এবং যদি read -eপ্রস্থানের পরে এই জাতীয় কয়েকটি স্ট্রোক "বাম" থাকে তবে সেগুলি পরে "ব্যবহার" করা হবে। আপনি সম্ভবত এটি চান না, সুতরাং স্ট্যান্ডিন থেকে অতিরিক্ত ক্যারেক্টারটি এই আদেশ দিয়ে ফেলে দিন:

read -st 0.1 -n 1000000

আপনি যদি প্রথমটির ঠিক পরে চালিত হন তবে readসমস্ত স্ট্রোক ধরার জন্য আরও সময়সীমা বিবেচনা করুন Esc, অধিকতর উত্তেজক ব্যবহারকারী কীটি স্ট্রোক করা বন্ধ করবে prior


পুরো স্ক্রিপ্টটি দেখতে এটির মতো হতে পারে:

#!/bin/bash

set -o emacs
bind '"\C-w": kill-whole-line'
bind '"\e": "\C-w\C-d"'
bind '"\e\e": "\C-w\C-d"'
IFS= read -rep "Enter name (ESC to exit): " || {
  printf '\nAborting\n'
  read -st 1 -n 1000000
  exit 1
}
printf 'The input was %s\n' "$REPLY"

স্ক্রিপ্ট (উত্সাহিত না হওয়া) তার নিজস্ব শেলের মধ্যে চলে তাই এই বাঁধাইগুলি আপনি যে শেলটিটি দিয়েছিলেন সেটিকে প্রভাবিত করবে না। আনবাইন্ড করার দরকার নেই, যদি না স্ক্রিপ্ট নিজেই চালিয়ে যায় এবং এক পর্যায়ে বাইন্ডিংগুলি কোনও বিষয়ে হস্তক্ষেপ করে।

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