পূর্ববর্তী কমান্ড থেকে আর্গুমেন্ট কীভাবে ব্যবহার করবেন?


287

আমি জানি যে Esc+ .আপনাকে সর্বশেষ আদেশের শেষ যুক্তি দেয়।

তবে আমি শেষ কমান্ডের প্রথম যুক্তিতে আগ্রহী। এটি করার জন্য কী কী বাধ্যবাধকতা রয়েছে?

একই লাইনে, শেষ কমান্ড থেকে নবম আর্গুমেন্ট পাওয়ার কি সাধারণ উপায় আছে? আমি জানি যে একটি ব্যাশ স্ক্রিপ্টের মধ্যে, আপনি ব্যবহার করতে পারেন $0, $1ইত্যাদি, কিন্তু এই কমান্ড উপর কাজ করে না।

এছাড়াও, পূর্ববর্তী কমান্ডগুলির 0 তম আর্গুমেন্টের মাধ্যমে পুনরাবৃত্তি সম্পর্কে কী বলা যায়, যেমন আমরা ধারাবাহিকভাবে Esc+ টিপে শেষ যুক্তির সাথে করতে পারি .?

উত্তর:


284

ঠিক যেমনটি M-.(মেটা-ডট বা এসকে-ডট বা এলটি-ডট) পঠন ফাংশন yank-last-arg, M-C-y(মেটা-কন্ট্রোল-ওয়াই বা এসএস-সিআরটিএল-ই বা সিটিআরএল-ওট-ওয়াই) পঠনের কাজটি yank-nth-arg। নির্দিষ্ট করে না দিয়ে n, এটি পূর্ববর্তী কমান্ডের প্রথম যুক্তিকে yanks করে।

একটি যুক্তি নির্দিষ্ট করতে, এস্কেপ এবং একটি সংখ্যা টিপুন বা আল্ট চেপে ধরে একটি সংখ্যা টিপুন। আপনি করতে পারেন Alt- -একটি নেতিবাচক সংখ্যা নির্দিষ্ট করে শুরু করতে আল্টকে ছেড়ে দিন এবং অঙ্কটি টিপুন (এটি আর্গুমেন্টের তালিকার শেষে থেকে গণনা করা হবে)।

উদাহরণ:

নিম্নলিখিত কমান্ড লিখুন

$ echo a b c d e f g
a b c d e f g

এখন পরবর্তী প্রম্পটে, টাইপ করুন echo(নিম্নলিখিত স্থানের সাথে), তারপরে

টিপুন Alt- Ctrl- yএবং আপনি এখন দেখতে পাবেন:

$ echo a

Enterএখনও টিপে না রেখে, নিম্নলিখিতটি করুন

প্রেস Alt- 3 Alt- Ctrl-y

প্রেস Alt- - 2 Alt- Ctrl-y

এখন আপনি দেখতে পাবেন:

$ echo ace

যাইহোক, আপনি echoআর্গুমেন্ট 0 নির্বাচন করে লাইনে লাগাতে পারতেন :

প্রেস Alt- 0 Alt- Ctrl-y

সম্পাদনা:

আপনি আপনার মূলটিতে যুক্ত হওয়া প্রশ্নের উত্তর দিতে:

আপনি টিপতে পারেন Alt- 0তারপর বারবার প্রেস Alt- .ধাপে পূর্ববর্তী কমান্ড মাধ্যমে (ARG 0)। একইভাবে Alt- -তারপরে পুনরাবৃত্তি করা Alt- .আপনাকে আগের পরবর্তী থেকে শেষ যুক্তিগুলির মধ্য দিয়ে যাওয়ার অনুমতি দেবে।

ইতিহাসে যদি কোনও নির্দিষ্ট লাইনে উপযুক্ত যুক্তি না পাওয়া যায় তবে ঘণ্টাটি বেজে যাবে।

যদি আপনি ঘন ঘন ব্যবহার করেন এমন কোনও নির্দিষ্ট সমন্বয় থাকে তবে আপনি একটি ম্যাক্রো সংজ্ঞায়িত করতে পারেন তাই একটি কীস্ট্রোক এটি সম্পাদন করবে। এই উদাহরণটি পূর্ববর্তী কমান্ডগুলি থেকে দ্বিতীয় তর্কটি স্মরণ করবে Alt- Shift- চাপ দিয়ে Y। আপনি এটির পরিবর্তে যে কোনও উপলভ্য কীস্ট্রোক পছন্দ করতে পারেন। আপনি পূর্বেরগুলিতে পদক্ষেপ নিতে বারবার টিপতে পারেন।

এটি চেষ্টা করে দেখতে, বাশ প্রম্পটে ম্যাক্রোটি প্রবেশ করুন:

bind '"\eY": "\e2\e."'

এটি অবিরাম করতে আপনার ~/.inputrcফাইলটিতে এই লাইনটি যুক্ত করুন:

"\eY": "\e2\e."

দুর্ভাগ্যক্রমে, এটি আর্গ 0 বা নেতিবাচক যুক্তি সংখ্যার জন্য কাজ করছে বলে মনে হচ্ছে না।


14
ব্যাশ / রিডলাইনের জন্য কীবোর্ড শর্টকাটগুলি সন্ধান করার সময়, আমি চলমান bind -lpএবং বর্তমান বাইন্ডিংগুলিতে সন্ধান করতে পছন্দ করি।
চাদ স্কিটারস

1
@ চ্যাডস্কিটারস: এবং -s(ব্যাশে ৪ এ নতুন) ব্যবহার করে তৈরি ম্যাক্রোগুলির তালিকা রয়েছে -x
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

নোট করুন যে আপনি M-.পাশাপাশি Alt-3 Alt-Ctrl-yডিজিটাল যুক্তিও ব্যবহার করতে পারেন : উদাহরণস্বরূপ হোল্ডিং Altএবং টাইপিংয়ের সমান 3.। আপনি যদি 3.মুক্তি না দিয়ে একাধিকবার টাইপ করেন তবে আপনি Altআপনার পূর্ববর্তী কমান্ড লাইনের তৃতীয় আর্গুমেন্টের মধ্য দিয়ে যান।
ডেজার্ট

@ ডিজিটার: আমি আমার দ্বিতীয় অনুচ্ছেদে যতটা বলি এবং তারপরে একটি উদাহরণ দেখাই।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ চ্যাডস্কিটারস, সতর্কতার জন্য ধন্যবাদ যে এখানে শত শত এন্ট্রি থাকবে! হাঃ হাঃ হাঃ.
jdk1.0

309

!$ পূর্ববর্তী কমান্ড লাইন আর্গুমেন্টের শেষ উপাদানটি পায়।


115
!:3আপনাকে তৃতীয়টি পেয়েছে
ম্যাট ডজ

108
! * আপনি ই.এম. সব পায়
অন্থন

75
!!আপনি সম্পূর্ণ শেষ কমান্ড পেতে। আপনি যদি ব্যবহার করতে ভুলে যান তবে দরকারী sudo
Un3qual

43
!:1-2আপনাকে 3 টি আর্গুমেন্টের শেষ ব্যতীত সবই পেয়ে যায়
টাইলার ব্রক

5
সতর্কতার মাত্র একটি শব্দ - আপনি যদি সম্মিলিত যুক্তি ব্যবহার করেন echo foo{,bar} bazতবে কমান্ডটি মুদ্রিত হিসাবে রেকর্ড করা হয় এবং পরে প্রসারিত হয়। উপরের সাহায্যে, echo !:1সমাধানগুলি পরে ব্যবহার করে echo foo{,bar}এরপরে প্রসারিত হয়echo foo foobar
শন

201

প্রথম যুক্তি ব্যবহার করতে, আপনি ব্যবহার করতে পারেন !^বা!:1

উদাহরণ:

$ echo a b c d e 
a b c d e
$ echo !^
echo a
a

$ echo a b c d e 
a b c d e
$ echo !:1
echo a
a

যেহেতু আপনার প্রশ্নটি অন্য কোনও যুক্তি ব্যবহারের বিষয়ে, তাই এখানে কিছু দরকারী রয়েছে:

!^      first argument
!$      last argument
!*      all arguments
!:2     second argument

!:2-3   second to third arguments
!:2-$   second to last arguments
!:2*    second to last arguments
!:2-    second to next to last arguments

!:0     the command
!!      repeat the previous line

প্রথম চারটি ফর্ম প্রায়শই ব্যবহৃত হয়। ফর্মটি !:2-কিছুটা স্ব-স্বজ্ঞাত, কারণ এটিতে সর্বশেষ যুক্তি অন্তর্ভুক্ত নয়।


দ্বিতীয়-শেষ আইটেমটি পাওয়ার কোনও উপায় আছে কি? অর্থাত্ file3থেকে পেতে mv file1 file2 file3 target/?
চার্লি হার্ডিং

3
আমি এই উত্তরটি অনেক পছন্দ করেছি এবং কেবলমাত্র সম্পূর্ণতার জন্য, আমি '! -2' সিনট্যাক্স সম্পর্কে একটি লাইন যুক্ত করার পরামর্শ দিচ্ছি যা আপনাকে পূর্ববর্তী কমান্ডের আগেরটিতে অ্যাক্সেস করতে দেয়।
বিবিভি

1
@bbv আরও সম্পূর্ণতার জন্য '2 2' কমান্ডটি আপনাকে ইতিহাসের দ্বিতীয় এন্ট্রিতে অ্যাক্সেস করতে দেয় (যদি এটি এখনও আপনার ইতিহাসের সেটিংসের উপর নির্ভর করে উপলব্ধ থাকে)। আপনি যদি প্রতিটি প্রম্পটে ইতিহাস নম্বরটি প্রদর্শন করেন তবে দরকারী।
816-8055

53

আমি আরও বেশি কিছু শিখতে চেয়েছি @larmans এর উত্তর পছন্দ করেছি। ম্যান পৃষ্ঠা বিভাগটি খুঁজে পেতে এবং কীসের জন্য গুগল করতে হয় তা জানতে অন্যকে সহায়তা করার জন্য এই উত্তর যুক্ত করা:

$ man  -P 'less -p ^HISTORY\ EXPANSION' bash
<...>
Word Designators

Word designators are used to select desired words from the event.
A : separates the event specification from the word designator.
It may be omitted if the word designator begins with a ^, $, *, -,
or %.  Words are numbered from the beginning of the line, with the
first word being denoted by 0 (zero).  Words are inserted into the
current line separated by single spaces.

   0 (zero)
          The zeroth word.  For the shell, this is the command word.
   n      The nth word.
   ^      The first argument.  That is, word 1.
   $      The last argument.
   %      The word matched by the most recent ‘?string?’ search.
   x-y    A range of words; ‘-y abbreviates 0-y’.
   *      All of the words but the zeroth.
          This is a synonym for 1-$’.  
          It is not an error to use * if there is just one word in
          the event; the empty string is returned in that case.
   x*     Abbreviates x-$.
   x-     Abbreviates x-$ like x*, but omits the last word.

   If a word designator is supplied without an event
   specification, the previous command is used as the event.

18

! the প্রথম যুক্তির জন্য কমান্ড হতে পারে। আমি নিশ্চিত না যে এনথ পাওয়ার কোনও উপায় আছে কিনা।


7
এটি
!:

N-th সর্বশেষ আইটেমটি পাওয়ার কী কোনও উপায় আছে, তাই !:nতবে শুরু থেকে বরং শেষ থেকে গণনা করা?
চার্লি হার্ডিং

14

আপনি আপনার ইতিহাসের যে কোনও কমান্ড থেকেও যুক্তি পেতে পারেন!


$ echo a b c d e f g
a b c d e f g
$ echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar
$ history | tail -5
  601  echo build/libs/jenkins-utils-all-0.1.jar
  602  history | tail -10
  603  echo a b c d e f g
  604  echo build/libs/jenkins-utils-all-0.1.jar
  605  history | tail -5
$ echo !-3:4
echo d
d
$ echo !604:1
echo build/libs/jenkins-utils-all-0.1.jar
build/libs/jenkins-utils-all-0.1.jar


4

উবুন্টু 18.04 এ পরীক্ষিত


পূর্ববর্তী যুক্তি সন্নিবেশ করতে:

  • Alt+ .: শেষ কমান্ড থেকে শেষ যুক্তি সন্নিবেশ করুন।
  • Alt+ #+ .: শেষ কমান্ড থেকে # টিউগ যুক্তি যুক্ত করুন।
  • Alt+ + -, #, Alt+ + ., Zsh: Alt + + -+ + #+ + .: শেষ হুকুম থেকে প্রথম আর্গুমেন্ট #nth সন্নিবেশ করুন।

লিনাক্সে আপনি ইতিহাসে ফিরে যেতে আদেশগুলি পুনরাবৃত্তি করতে পারেন

উদাহরণ:

শেষ আদেশটি হ'ল:

mv foo bar
  • Alt+ 0+ .: সর্বশেষ কমান্ডের প্রথম যুক্তি = সন্নিবেশ করানmv
  • Alt+ 2+ .: শেষ কমান্ডের শেষ 2 য় আর্গুমেন্ট .োকানfoo
  • up, Ctrl+ w: শেষ শব্দ = ব্যতীত শেষ কমান্ডmv foo

সাধারণ শর্টকাটগুলি

  • Ctrl+ w: কার্সার থেকে শেষ শব্দটি সরিয়ে দেয়
  • Alt+ d: কার্সার থেকে পরবর্তী শব্দটি সরিয়ে দেয়
  • Ctrl+ k: কার্সারের পরে সমস্ত কিছু কেটে দেয়
  • Ctrl+ u, zsh: Alt + w: কার্সারের আগে সবকিছু কেটে দেয়
  • zsh: Ctrl + u: সম্পূর্ণ কমান্ডটি কেটে দেয় (ব্যাশে আপনি Ctrl+ u, Ctrl+ + একত্রিত করতে পারেন k)
  • Ctrl+ y: পূর্বে Ctrl+ uএবং Ctrl+ দিয়ে কাটা অক্ষরগুলি আটকে দিনk
  • Ctrl+ _: শেষ সম্পাদনাটি পূর্বাবস্থায় ফিরুন ( Ctrl+ এর বেশি হলে খুব কার্যকর w)
  • Ctrl+ left: শেষ শব্দে সরান
  • Ctrl+ right: পরের শব্দে সরান
  • homeবা Ctrl+ a: লাইনের শুরুতে সরান
  • endবা Ctrl+ e: লাইনের শেষ প্রান্তে যান

পূর্ববর্তী কমান্ডে আর্গুমেন্টগুলির মাধ্যমে পুনরাবৃত্তি করতে

কেবল zsh এ কাজ করে

এটি চালান বা আপনার এ যোগ করুন ~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word

আপনি চান হিসাবে ফিরে যেতে এখন Alt+ ব্যবহার করুন ., তারপরে আর্গুমেন্টগুলির মাধ্যমে পুনরাবৃত্তি করতে Alt+ ব্যবহার করুন:

ধরে নেওয়া শেষ কমান্ড হয়

echo 1 2 3 4 5
  • Alt+ .:5
  • Alt+ .+ ::4
  • Alt+ .+ :+ ::3
  • Alt+ .+ :+ :+ ::2
  • Alt+ .+ :+ :+ :+ ::1
  • Alt+ .+ :+ :+ :+ :+ ::echo

উত্স: https://stackoverflow.com/a/34861762/3163120

সমস্ত শর্টকাট উপলভ্য দেখতে

  • ব্যাশ: bind -lp
  • zsh: bindkey -L

আমি এই টুকরো টিকে এই আপডেটটি রাখছি https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9


1
Alt .জ্যাক অন জ্যাক ম্যাক টাইপ করছে 🤔
আন্দ্রে পেনা

1
প্রস্থান . এটি কেবল সর্বশেষের জন্য কাজ করে যদিও কাজ করে। আপনি সময় মতো ফিরে যেতে টাইপিং রাখতে পারবেন না। উত্তরটি আপডেট করার পক্ষে এটি মূল্যবান হতে পারে। আপনাকে অনেক ধন্যবাদ.
আন্দ্রে পেনা

সমস্ত শর্টকাট বাঁধাই করতে bindkey -Lআপনি zsh এ চালাতে পারেন, সম্ভবত এটি সমস্যাটি চিহ্নিত করতে বা অন্য দরকারী কমান্ডগুলি সন্ধান করতে সহায়তা করবে। উদাহরণস্বরূপ আমার ক্ষেত্রে: বাইন্ডিং Alt .হিসাবে সংজ্ঞায়িত করা হয় bindkey "^[." insert-last-wordCtrl L(স্ক্রিন সাফ করার জন্য) -> bindkey "^L" clear-screenAlt+Ctrl h-> bindkey "^[^H" backward-kill-word( Ctrl wশেষ শব্দটি মুছে ফেলার মতো)
ম্যাডাকল

@ ম্যাডাকল আমি বাইন্ড কীগুলিতে উল্লিখিত অনুলিপি-অনুলিপি হিসাবে দেখতে bindkey "^[^_" copy-prev-word
পেলাম

3

মূলত পূর্ববর্তী (কমান্ডের) আর্গুমেন্টগুলিকে ইয়াঙ্ক করার ক্ষেত্রে এটির একটি ব্যবহার রয়েছে ।

উদাহরণস্বরূপ, যদি নিম্নলিখিত আদেশটি জারি করা হয়:

echo Hello, world how are you today?

তারপর, Hello,প্রথম আর্গুমেন্ট, এবং হতে হবে ষষ্ঠ , গত এক যে; এর অর্থ এটি টাইপ করে উল্লেখ করা যেতে পারে:today?

Alt+6 অনুসরণ করেছে Ctrl-Alt-6


Ctrlঐতিহ্যগতভাবে একটি টুপি চরিত্র দ্বারা প্রকাশ করা হয় ^কি নামের prepended, এবং Altযেমন M-করে এম ETA উপসর্গ।

সুতরাং উপরের শর্টকাটটি ^Myইয়ঙ্ক হিসাবে পুনরায় সংজ্ঞায়িত করা যায়।


এছাড়াও, আছে টুপি কমান্ড লাইনে প্রতিকল্পন শর্টকাট:

echo Hello, world!

^Hello^Bye

Bye, world!

পূর্ববর্তী কমান্ডের প্রথম মিলিত স্ট্রিংকে বিকল্প হিসাবে বোঝানো:

Hello, world! Hello, people!

^Hello^Bye

ফলাফল হবে:

Bye, world! Hello, people!

দ্বিতীয় ম্যাচটি ( hello) অপরিবর্তিত রেখে

দ্রষ্টব্য: টুপিগুলির মধ্যে স্থান ত্যাগ করবেন না , বা অপারেশনটি কাজ করবে না।


উপরেরগুলির জন্য কেবল একটি শর্টকাট:

!:s/Hello/Bye

পূর্ববর্তী কমান্ডের প্রথম সন্ধান করা (মিলিত) স্ট্রিংয়ের ইভেন্ট-লেভেল (*) প্রতিস্থাপনের সাথে gস্যুইচ দিয়ে প্রথম অংশটি উপসর্গ করার সময় পুরো লাইন জি- তে প্রয়োগ করা হবে :

echo Hello, world! Hello, people!

!:gs/Hello/Bye

Bye, world! Bye, people!

সাধারণত যেমন অন্যান্য সম্পর্কিত আদেশগুলিতে করা হচ্ছে sed, vi, এবং regex(রেগুলার এক্সপ্রেশন) - অনুসন্ধান করতে (ক, standart পথ ম্যাচ স্ট্রিং )।

না, আপনি করতে পারবেন না !:sg/Hello/Byeবা !:s/Hello/Bye/gএখানে, এটি সিনট্যাক্স !


  • ! ঘটনা জন্য; ইভেন্টটি কমান্ডের ইতিহাসে কমান্ড আউটপুট বা অপারেশন হিসাবে সমাপ্ত হতে পারে।

ম্যানুয়াল পৃষ্ঠা, ব্লগ এবং ফোরাম সহ বিভিন্ন উত্স থেকে যা পড়েছি তা থেকে আমি নিজে এটি ব্যবহার করে এবং জিনিসগুলি নিজের করে চেষ্টা করে বুঝেছি।

আশা করি এটি bashবোর্ন-অ্যাগেইন শেল (শেলের উপর একটি নাটক sh, যা নিজেকে আবিষ্কারকের শেষ নাম অনুসারে বোর্ন শেল নামে পরিচিত) এর সার্ভার ( সার্ভার ওএস এর ) সহ অনেক বিতরণে ডিফল্ট শেল কী, এর রহস্যজনক উপায়ে কিছুটা আলোকপাত করবে Hope



0

গৃহীত উত্তরের শেষে বর্ণিত পদ্ধতিটি আমার জন্য জেরোথ আর্গুমেন্টের সাথেও কাজ করে। আমার এই লাইনগুলি রয়েছে ~/.inputrc:

"\en": "\e0\e."
"\em": "\e1\e."
"\e,": "\e2\e."

\e2\e.ওভার সুবিধা আছে \e2\e\C-yএটি পূর্ববর্তী কমান্ড মাধ্যমে চক্র যদি এটা বারবার পরিবর্তে পূর্ববর্তী কমান্ড একাধিক বার দ্বিতীয় যুক্তি ঢোকাতে টেপা হলে।

পুরো পূর্ববর্তী কমান্ড সন্নিবেশ করতে, আপনি টাইপ করতে পারেন !!\e^\e^হয় history-expand-line


0

আপনি যদি ম্যাকের উপরে থাকেন তবে আপনি সিটিআরএল + বর্ণের সাথে বর্ধিত অক্ষর পেতে পারেন। আমার ডায়াল-অফ স্পেস-বার-অপশন কীটি আমার টার্মিনালে মেটা হিসাবে সংজ্ঞায়িত করা হয়েছে (আইটিার্ম 2) সেট আপ করা হয়েছে। এর অর্থ আমি শব্দটি নেভিগেট করতে এবং পূর্ববর্তী আদেশগুলি থেকে পরামিতিগুলি টানতে চাবিটি ব্যবহার করি।

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