উত্তর:
!!
নিজে থেকে চালানো আপনার পূর্ববর্তী কমান্ডটি সেভ করা অনুসারে চালিত হয় history
। উপরন্তু, করছেন !-1
, !-2
, ইত্যাদি আপনার শেষ কমান্ড দ্বিতীয় গত কমান্ড, ইত্যাদি সঞ্চালন করে। কুশলী!
!<command>
~/.bash_history
<command>
!
বাশ জিনিসটি অনুলিপি tcsh
করা হয়েছে যা এটি কখনও কাজে লাগার চেয়ে আরও বেশি বার ছড়িয়ে দিয়েছে। ডাবল উক্তিগুলির ব্যাখ্যা থেকে সুরক্ষা দেয় না !
। $ foo "!bar"
-> !bar: event not found
।
উত্তর : আপনি sudo !!
পূর্ববর্তী কমান্ডটি বর্ধিত সুবিধাসমূহের সাথে পুনরাবৃত্তি করতে সরাসরি পরে প্রবেশ করুন ।
সম্পাদনা: চিত্রটি reddit এর মাধ্যমে পাওয়া গেছে এবং এটি র্যান্ডাল মুনরোয়ের মূল xkcd কমিকের একটি প্যারডি ।
আপনি আপনার পুরানো কমান্ডগুলির মাধ্যমে স্ক্রোল করতে এবং এগুলি পুনর্লিখন / পরিবর্তন এবং তাদের sudo
সামনে অ্যাড করার জন্য আপ-তীর কীটি চেষ্টা করতে পারেন । (তীর কীগুলির উপরে হোম বোতামটি শুরুতে অবস্থানটি সেট করবে))
আমি sudo !!
ধারণাটি অপছন্দ করি , কারণ আপনি মাঝে মাঝে অন্য আদেশটি যোগ করেন এবং আর মনে রাখবেন না।
sudo !!
, শেলটি প্রসারিত হবে !!
যাতে আপনি দেখতে পাচ্ছেন এটি কোন আদেশটি চালানোর চেষ্টা করছে। সুতরাং, এটি সিটিআরএল-সিটিকে আঘাত করতে এবং সঠিক কমান্ডটি খুঁজে পেতে বিরক্ত হতে পারে, তবে এটি আপনাকে অচেতন করে তুলবে না।
!!
sudo !!<TAB>
এবং এটি !!
আমার জন্য স্বয়ংক্রিয়ভাবে পূর্ণ হয় । বাশের সাহায্যে ইতিহাস প্রসারিত করতে পারে M-^
(আমার জন্য, Alt + shift + 6), তবে এটি কম সাবলীল (যদিও আপনি এটি পুনর্নির্মাণ করতে পারেন)। এছাড়াও রয়েছে shopt -s histverify
যা এটি তৈরি করে যাতে আপনি যখন ইতিহাসের প্রসার ব্যবহার করেন এবং এন্টার টিপুন তখন এটি আপনাকে পরিবর্তিত সম্প্রসারণের সাথে আরেকটি প্রম্পট লাইন দেয় যা আপনাকে এটি দেখতে / সম্পাদনা করতে দেয়।
shopt -s histverify
একটি বিট সাহায্য করবে না। বেশিরভাগ লোক Enter
দুবার আঘাত করার অভ্যাস করবে । এই মুহুর্তে তারা এখনও কি ঘটেছে তা যাচাই করতে খুব দেরি করে।
আমি কেবল একটি বিকল্প যুক্ত করব: টাইপিংয়ের চেয়ে ছোটsudo !!
এবং আরও নমনীয়:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
এটি ঠিক একই সংখ্যক কীস্ট্রোক (আমি "সিটিআরএল + এ" এক হিসাবে গণনা করি ...), তবে "আপ তীর" যুক্ত করে আপনি আপনার ইতিহাসে যে কোনও কমান্ডই রাখতে পারেন এটি করতে পারেন।
set -o vi
) ব্যবহার করতে পারেন । তারপরে আপনি পালাতে পারবেন (কমান্ড মোডে যান), এবং তারপরে 'আমি' (মূলধন 'আমি', লাইনের শুরুতে সন্নিবেশ করান)।
এটি করার কয়েকটি উপায় রয়েছে
কমান্ডের sudo
আগে যুক্ত করে কেবল কমান্ডটি সন্নিবেশ করান
Up arrowশেষ কমান্ড পেতে টিপুন এবং sudo
এটি সামনে রাখুন।
প্রবেশ করান sudo !!
!!
শেষ বিস্তৃতি কমান্ড প্রবেশ করে। আপনি এখানে কমান্ড লাইনের ইতিহাসের সাথে অন্য জিনিসগুলির সাথে একই জিনিস করতে পারেন
এই প্রশ্নটি " একই কমান্ড চালান তবে কিছু সংশোধন করে " হিসাবে সাধারণ করা যেতে পারে , যেহেতু ইউনিক্সের একটি উজ্জ্বল নকশার সিদ্ধান্ত, শেলটি একবার প্রয়োগ করা হয়েছিল, শেল থেকে আনা কোনও কমান্ড দ্বারা লাভ করা যেতে পারে।
অন্য কথায়, এই কৌতুক প্রযোজ্য নয় শুধু থেকে sudo
:
sudo !!
)time !!
)env A=b B=z !!
) দ্বারা পুনরাবৃত্তি করুন!!
)ইতিহাসের সম্প্রসারণ (ইতিহাসের বিকল্প হিসাবেও পরিচিত) পূর্ববর্তী আদেশগুলি পুনরাবৃত্তি করা আরও সহজ করার জন্য (কম কীস্ট্রোক সহ) কেবলমাত্র একটি শেল বৈশিষ্ট্য। এর জন্য আপনার শেল ম্যান পৃষ্ঠাটি পরীক্ষা করুন history expansion
। এটি ইতিহাসের সাথে আরও অনেক কৌতুক এবং শর্ট-কাটগুলি বর্ণনা করতে পারে যেমন:
আপনি সংখ্যা দ্বারা পূর্ববর্তী আদেশগুলি উল্লেখ করতে পারেন:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
আপনি পূর্ববর্তী আদেশগুলিতে পৃথক শব্দগুলি উল্লেখ করতে পারেন:
some-command !$ # run some-command on the last arg of previous command
পুনরাবৃত্তি করার আগে আপনি অনুসন্ধান করতে পারেন:
!?awk # repeat the last command including the string 'awk'
আপনি ইতিহাস অনুসন্ধান করতে এবং অন্য কোনও কিছু দ্বারা প্রতিস্থাপন করতে পারেন:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
এবং আরও অনেক কিছু, যেহেতু আপনি কমান্ড নির্বাচন, আরগ-নির্বাচন, অনুসন্ধান এবং স্বতন্ত্রভাবে প্রতিস্থাপন করতে পারেন।
আপনার শেলের ম্যান পৃষ্ঠাটি (এই ক্ষেত্রে man bash
) আপনার বন্ধু।
আমি ব্যাশের পরিবর্তে zsh ব্যবহার করি এবং এটি আমার মধ্যে থাকে ~/.zshrc
, সুতরাং কমান্ড লাইনের শুরুতে Alt+ Sসন্নিবেশগুলি টিপুন sudo
:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
দুর্ভাগ্যক্রমে, আমি একই জিনিসটি বাশ করার কোনও উপায় ট্র্যাক করতে পারি নি।
যদি আপনি এটি একটি উরফে করতে চান তবে আপনাকে alias redo='sudo $(history -p !!)'
কোনও কারণে ব্যবহার করতে হবে ।
আমি যেভাবে এটি পছন্দ করি:
তবে কেবল "সুডো !!" করা সহজ হতে পারে, এটি আপনার উপর নির্ভর করে।