সুডোর অধীনে পূর্ববর্তী কমান্ডটি পুনরায় চালু করুন


8

আমি একটি কমান্ড চালাতে সক্ষম হতে চাই, এটির যথাযথ অনুমতি নেই বলে এটি ব্যর্থ হয়। তারপরে আমি যে কমান্ডটি চালিয়েছি তা সফল করতে আমি "দয়া করে" লিখতে পারি।

টার্মিনালে আমি যা করতে চাই তা এখানে:

$ run command
"you don't have access to do that"
$ please
"ran successfully"

আমি দেখেছি !!এটি আগের কমান্ডটি দখল করবে, তাই আমি ভেবেছিলাম যে আমি এটি ব্যবহার করতে পারি, তবে আমি এটি কাজ করতে পারি না।

আমার প্লিজ.শ শেল স্ক্রিপ্টটি দেখতে দেখতে ভাল লাগে তবে আমি এগুলির কোনওটিই কাজ করতে পারি না। এটি কেবল "আদেশটি পাওয়া যায় নি!" এবং সুডোর ব্যবহার মুদ্রণ করে।

#!/bin/zsh

#sudo !!
#sudo `!!`
sudo $(!!)

এটি স্ক্রিপ্ট ছাড়া কাজ করে? আপনি যদি কেবল চালনা sudo !!করেন তবে এটি কী প্রত্যাশার মতো চলে? আমি মনে করি !! কেবলমাত্র বাশ ওরফে হতে পারে, তাই এটি zsh এ কাজ নাও করতে পারে
ক্রিস ওয়েন

3
আফাইক, ইতিহাস সম্প্রসারণ ( !!এবং অন্যান্য) কেবল ইন্টারেক্টিভ শেলগুলিতে কাজ করে না স্ক্রিপ্টগুলিতে।
থর

sudo !!ইন্টারেক্টিভ মোডে প্রায় প্রত্যাশা অনুযায়ী কাজ করে। আমি এন্টার টিপলে এটি !!পূর্ববর্তী কমান্ডের সাথে প্রতিস্থাপন করবে । এটি চালানোর জন্য আমাকে আবার এন্টার টিপতে হবে।
জেবি।

উত্তর:


6

আপনি !!কোনও শেল স্ক্রিপ্টে ব্যবহার করতে পারবেন না , কারণ আপনি শিশু শেলের মধ্যে প্যারেন্ট শেল অ্যাক্সেস করতে পারবেন না। যদিও আমি ব্যবহারের পরামর্শ দিচ্ছি sudo !!, আপনি যদি সত্যিই একটি BASH স্ক্রিপ্ট তৈরি করতে চান তবে আপনাকে .bash_history ব্যবহার করতে হবে, যেমন:

#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`

এটি অবশ্যই একটি নিখুঁত সমাধান নয়, তবে এটি কৌশলটি করা উচিত। আপনি যদি জেডএসএইচ ব্যবহার করছেন তবে এটি কার্যকর হবে না, কারণ জেডএসএইচ .Bash_history (আমার জ্ঞানের) আউটপুট দেয় না। আপডেট : এখানে এমন একটি সংস্করণ যা জেডএসএইচের সাথে কাজ করা উচিত:

#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`

আশাকরি এটা সাহায্য করবে!

আপনি যদি স্ক্রিপ্টটি বুঝতে না পারেন তবে এটি সহজেই বাসে প্রবেশ করা শেষ কমান্ডটি সুডো দিয়ে চালায়।


ঠিক আছে. আমি যদিও zsh ব্যবহার করছি। zsh এ .bash_history এর সমতুল্য কি আছে?
জেবি।

আমি এখন দেখছি, হ্যাঁ, একটি সংস্করণ কাজ করা উচিত। যদিও আমি এখনও এটি পরীক্ষা করিনি।
মিজিন

বাশ ইতিহাস ফাইলটি সরাসরি পড়বেন না। fcবা historyবিল্ট-ইনগুলি ব্যবহার করুন। ডিফল্টরূপে, আপনি ব্যাশ থেকে লগ আউট না করা পর্যন্ত $ HISTFILE আপডেট হয় না।
স্টিভেন কে

24

আপনার .zshrc এ যুক্ত করুন:

alias please='sudo $(fc -ln -1)'

ব্যবহারের সহজলভ্যতার জন্য উপরোক্ত গৃহীত উত্তরের চেয়ে ভাল মনে হচ্ছে ট্রিট কাজ করে।
মিশেল কারি

2
অদ্ভুত জন্য: fcফিক্স কমান্ড ঘোরা। ডকুমেন্টেশন এখানে
শেফার্ড

ধন্যবাদ! আমি জানি এই AskUbuntu, কিন্তু আমি সিস্টেম ক্লিপবোর্ডে আমার শেষ কমান্ড কপি করতে উপর ওএসএক্স এই ব্যবহৃত: alias lastcmd="fc -ln -1 | pbcopy"আমার বিশ্বাস এই উচিত উবুন্টু কাজ (?): alias lastcmd="fc -ln -1 | xclip -selection clipboard
হেল্লাম্যাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.