বাশে কীভাবে একটি বিশেষ প্রসারণযোগ্য বাক্য তৈরি করবেন?


12

আমি নিজেকে <command> --help | grep <feature>প্রতিদিন খুব প্রায়ই কাজ করতে দেখি । যদি এটা ভালো কিছু করতে সম্ভব ছিল আমি ভাবছিলাম ^^যে বিস্তৃতি "--help | grep"এবং তারপর আমি এই কাজ:

ls ^^ size

এটি নিম্নলিখিত কার্যকর করা হবে:

ls --help | grep size

উত্তর:


15

এর সাথে zsh, আপনি একটি বিশ্বব্যাপী নাম ব্যবহার করবেন :

$ alias -g '^^=--help|grep --color -i'
$ ls ^^ size
     --block-size=SIZE      scale sizes by SIZE before printing them; e.g.,
                              '--block-size=M' prints sizes in units of
                              1,048,576 bytes; see SIZE format below
 -h, --human-readable       with -l and/or -s, print human readable sizes
 -s, --size                 print the allocated size of each file, in blocks
 -S                         sort by file size, largest first
     --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
 -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
The SIZE argument is an integer and optional unit (example: 10K is 10*1024)

এর সাহায্যে bashআপনি ইতিহাসের সম্প্রসারণটি ব্যবহার করতে সক্ষম হবেন যা শেল সিনট্যাক্স পার্সিংয়ের ক্ষেত্রে পর্যাপ্ত পরিমাণে ঘটে যা এটি কোনও পাইপ প্রতিস্থাপনে কাজ করতে পারে:

  1. আপনি যে পাঠ্যটি প্রতিস্থাপন করতে চান এবং এমন একটি বিশেষ চরিত্র যা আপনি অন্যথায় ব্যবহার করতে পারবেন না তা দিয়ে ইতিহাসকে প্রধান করুন (যেমন £এখানে আমার কীবোর্ডে ঘটেছিল):

     $ --help $(: £)|grep
     bash: --help: command not found
     Usage: grep [OPTION]... PATTERN [FILE]...
     Try 'grep --help' for more information.
  2. তারপরে এটি পুনরুদ্ধার করতে ইতিহাসের সম্প্রসারণ ব্যবহার করে:

    $ ls !?£? size
    ls --help $(: £)|grep size
         --block-size=SIZE  scale sizes by SIZE before printing them; e.g.,
                              '--block-size=M' prints sizes in units of
     -h, --human-readable   with -l and/or -s, print human readable sizes
     -s, --size             print the allocated size of each file, in blocks
     -S                     sort by file size, largest first
         --sort=WORD        sort by WORD instead of name: none (-U), size (-S),
     -T, --tabsize=COLS     assume tab stops at each COLS instead of 8

অথবা আপনি কিছু কী বা কী সিকোয়েন্স প্রেসের সাহায্যে readlineপ্রসারিত করতে পারেন --help|grep। এটি কেবল প্রয়োগ করতে bash(এবং gdbরিডলাইন ব্যবহারের মতো অন্যান্য অ্যাপ্লিকেশন নয় ) আপনি bindব্যাশ বিল্টিন কমান্ডটি ব্যবহার করতে পারেন যা bashকনফিগার করার readlineজন্য এপিআই , যেমন আপনার ~/.bashrc:

bind '"^^": "--help|grep "'

অথবা আপনার ~/.inputrc(পঠনের কনফিগারেশন ফাইল) যুক্ত করুন:

$if Bash
"^^": "--help|grep "
$endif

(অন্যান্য শেল রয়েছে rcবা এর মতো esপাঠ্যলাইন ব্যবহার করা হয়েছে এবং যেখানে এই বাঁধাই করা বুদ্ধিমান হতে পারে তবে এএএএএফসিটি, তারা অনুরোধ করার rl_readline_nameআগে ভেরিয়েবলটি সেট করে না readlineযাতে আপনি $ifতাদের জন্য কিছু বিবৃতি যুক্ত করতে সক্ষম হবেন না (তারা otherসমস্ত অ্যাপ্লিকেশনের মতো দেখায় যা তাদের আবেদনের নামটি না জানিয়েই পঠনখণ্ড ব্যবহার করে))।

নোট করুন যে ^প্রতিস্থাপনটি ঘটে যাওয়ার জন্য আপনাকে প্রথমে অর্ধেক সেকেন্ডের মধ্যে (ডিফল্টরূপে) প্রবেশ করতে হবে।


আপনি কি আরও কিছুটা রিডলাইন সমাধান ব্যাখ্যা করতে পারবেন ?! আমি কোথায় এই বাঁধাই যুক্ত করব? কোন অ্যাপ্লিকেশনগুলির উপর সেই বাঁধাই প্রসারিত হবে?
ইউকশিমা হুকসে

@ ইউকশিহিমহক্সে, সম্পাদনা দেখুন
স্টাফেন চেজেলাস

17

আপনি এটির জন্য একটি ব্যাশ ফাংশন ব্যবহার করতে পারেন:

নিম্নলিখিতগুলি আপনার ~ / .bashrc এ রাখুন:

qh() {
    type -all "$1" ; { man "$1" || "$1" --help ;} | egrep -i -- "$2"
}

আপনি যখন নিজের bashrc কাজটি সংরক্ষণ করেন source ~/.bashrcআপনি তা করতে পারেন:

$ qh ls size
      --block-size=SIZE      scale sizes by SIZE before printing them; e.g.,
                               '--block-size=M' prints sizes in units of
  -h, --human-readable       with -l and/or -s, print human readable sizes
  -s, --size                 print the allocated size of each file, in blocks
  -S                         sort by file size, largest first
      --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
  -T, --tabsize=COLS         assume tab stops at each COLS instead of 8

1
আপনার $ 1 এবং $ 2 উদ্ধৃত করা উচিত। আমি এটিকে এই রূপে পরিবর্তন করতে পারি: qh () { type -all "$1" ; { "$1" --help || man "$1" ;} | egrep -i -- "$2" ;} # সুতরাং আপনি করতে পারেন: qh ls আকার, qh ls "কিছু | অন্য" ইত্যাদি n (nচ্ছিক) type -all "$1"$ 1 সম্পর্কেও তথ্য যুক্ত করে: এটি বলছে যে আপনি যদি কোনও নাম, একটি ফাংশন, একটি চালু করছেন কমান্ড, ইত্যাদি। এবং এটি মানুষের "" 1 "থেকে তথ্য দেয় যদি the 1 কমান্ডের" --help "বিকল্পটি না থাকে (কখনও কখনও এটি ঘটে)
অলিভিয়ার ডুলাক 11:38

1
@ অলিভিয়ারডুলাক আপনি কি টাইপ -ল "$ 1" সম্পর্কে কিছুটা আরও ব্যাখ্যা করতে পারেন? কোন ক্ষেত্রে এটি প্রয়োজন হবে?
tgwtdt

আমার ধরণের সংস্করণ (কুবুন্টু ১.0.০৪) সম্পর্কে জানে -a, -lবা সম্পর্কে কিছুই বলে না -all, তবে ফাংশনটি কাজ করে।
জো

8

আপনি রিডলাইন বাইন্ডিং ব্যবহার করতে পারেন:

মত একটি লাইন যোগ করুন

"^^": "--help | grep "

আপনার in / .inputrc এ

তারপরে আপনার পদটিতে ^ X ^ R টিপুন এবং বাঁধাই সক্রিয় হবে।

কী করার ls ^^ফলে এখন ফলাফল আসবে ls --help | grep


আমি দেখার আগে জবাব দিয়েছিলাম, স্টিফেন রিডলাইন সমাধান যুক্ত করেছে। আমি আমার উত্তরটি মুছে ফেলেছি, কিন্তু তারপরে মুছে ফেলা হয়েছে, যখন আমি মন্তব্যটি
পঠনের

2
আমি এখন আমার উত্তরে এর সাথে আরও কিছু যুক্ত করেছি।
স্টাফেন চ্যাজেলাস

1
আপনার মতো লক্ষ্যবস্তু উত্তর এবং স্টাফেনের মতো বিস্তৃত উত্তরগুলির উভয়েরই জায়গা রয়েছে। একটি upvote আছে!
বিশপ

5

lessসহায়তা বার্তাটি দেখতে ব্যবহার করা

আপনার অনুসন্ধানের প্রশ্নের সাথে মেলে এমন রেখার চারপাশের প্রসঙ্গটি দেখতে আপনি দরকারী হতে পারেন find

hh () { "${1}" --help | less -p "${2}" ; }

এই bashফাংশনটিকে কল করার সিনট্যাক্সটি qh@ tgwtdt এর উত্তরে ফাংশনের অনুরূপ , প্রথম যুক্তি যাচাই করার আদেশ, এবং দ্বিতীয় যুক্তি অনুসন্ধান শব্দ। উদাহরণ স্বরূপ:

hh ls size
hh ls "symbolic link"

এটি সম্পূর্ণ সহায়তা বার্তাটি খোলে less, অনুসন্ধান শব্দটির প্রতিটি উদাহরণ হাইলাইট করে এবং অনুসন্ধান শব্দটির প্রথম উদাহরণে স্ক্রোল করে। এরপরে আপনি nঅনুসন্ধান শব্দটি সহ পরবর্তী লাইনে স্ক্রোল করতে টিপতে পারেন , nআবার পরবর্তীটির জন্য এবং আরও কিছু। পূর্ববর্তী উদাহরণে ফিরে স্ক্রোল করতে টিপুন N। ব্যবহার করুন Home, End, Page Up, Page Down, Up Arrow, এবং Down Arrowসাধারণ নেভিগেশনের জন্য কি। প্রেস qবা Qপ্রস্থান lessএবং কমান্ড লাইন ফিরে।


3

আমি @ggtdt দ্বারা সমাধানটি পছন্দ করেছি, তাই আমি এটি কিছুটা বাড়িয়েছি।

এটি একই কাজ করে তবে ত্রুটিগুলি পরিচালনা করতে কিছুটা করে এবং বিল্ট-ইনগুলি প্রক্রিয়া করার চেষ্টা করে।

কিউএইচটি) instead এর পরিবর্তে () ব্যবহার করে (কিউএইচ 1 () এবং আউট লোকাল (সাবসেলের মধ্যে)।

function qh () (
    function qh1 () {
      out="$(help "$1" 2>&1 )"
      [ $? -ne 0 ] && return 1
      echo "$out"
    }

    type -all "$1" ; { qh1 "$1" || "$1" --help 2>/dev/null || man "$1" 2>/dev/null ;} | egrep -i -- "$2"
) 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.