আপনি কেবল sudo
শেল কমান্ডের সামনে আটকে থাকতে পারবেন না , সেই আদেশটি পুনরায় মূল্যায়নের জন্য আপনাকে শেলটি চাপতে হবে (ভেরিয়েবল প্রসারিত করা, পুনর্নির্দেশ অপারেটরগুলির জন্য ফাইল খোলার মতো কাজ করা ইত্যাদি)। তাই যে
sudo bash -c !!
ব্যতীত এটি বেশ কার্যকর হয় না, কারণ !!
পূর্ববর্তী কমান্ডের পাঠ্য, বিশেষ অক্ষর এবং সমস্তগুলিকে বিভক্ত করে। আপনাকে কমান্ডের পাঠ্যটি স্ট্রিং হিসাবে পুনরুদ্ধার করতে হবে এবং এটি একটি আর্গুমেন্ট হিসাবে পাস করতে হবে sh
। সৌভাগ্যবসত, ব্যাশ এর fc
builtin আপনি that¹ করতে দেয়।
sudo bash -c "$(fc -ln -1)"
বা এমনকি, বর্তমানে চলমান ব্যাশের একই সংস্করণটি আহ্বান করতে ভুলবেন না:
sudo "$BASH" -c "$(fc -ln -1)"
নোট করুন যেহেতু কমান্ডটি একটি পৃথক শেল প্রক্রিয়াতে কার্যকর করা হয়, এটি পরিবেশের ভেরিয়েবল (কেবলমাত্র sudo
মনের সংরক্ষণ করে) প্রাপ্ত হয়, তবে শেলটি অভ্যন্তরীণ ভেরিয়েবলগুলি নয়। শেল বিকল্পগুলি (উদাঃ kshglob
) এবং অন্যান্য সেটিংস ডিফল্ট থেকে শুরু হবে।
একই কমান্ড- zsh এবং ksh- এ কাজ করে, যদিও এটিটি ksh93 এর জন্য উভয় first
এবং last
সংখ্যা উভয়ই fc
³ (যা বাশ, zsh এবং pdksh / mksh তেও কাজ করে) পাস করতে হবে :
sudo zsh -c "$(fc -ln -1)"
sudo ksh -c "$(fc -ln -1 -1)"
sudo "$0" -c "$(fc -ln -1 -1)"
$0
চলমান শেলটির এক্সিকিউটেবলকে মনোনীত করতে ব্যবহার করা কেবল তখনই কাজ করে যদি শেলটি $ PATH এবং $ PATH- র মাধ্যমে পরিবর্তিত হয় না বা কোনও পরম পথের মধ্য দিয়ে ডাকে।
এখানে zsh এর আরেকটি পদ্ধতি যা সামান্য পরিষ্কার তবে লম্বা:
sudo zsh -c $history[$[HISTCMD-1]]
সতর্কতার একটি চূড়ান্ত শব্দ: sudo
সম্ভাব্য বিপজ্জনক আদেশের জন্য। এটি ব্যবহার করা খুব সহজ করবেন না!
The শুরুতে কিছু অতিরিক্ত শ্বেতস্থান রয়েছে এবং কমান্ড প্রতিস্থাপনটি শেষে নতুন লাইনের বাইরে চলে যায়, তবে শেলটির বাক্য গঠনটি সেটির জন্য পাত্তা দেয় না।
² আমি মনে করি না zsh বা ksh এর বাশের মতো কিছু আছে $BASH
; $0
কেবল তখনই কাজ করে যখন এটি একটি পরম পাথ, বা যখন এতে কোনও স্ল্যাশ না থাকে এবং কমান্ড অনুসন্ধানের পথটি পরিবর্তিত হয় না।
³ জন্য একটি alias হয় এটিটি ksh কিন্তু যে শুধু ভাল হিসাবে আছে। fc
hist