जवाबों:
!!
अपने दम पर निष्पादित आपकी पिछली कमांड को सहेजे गए अनुसार चलाता है history
। इसके अलावा, करना !-1
, !-2
और इसी तरह आपकी अंतिम कमांड, दूसरी अंतिम कमांड, और इसी तरह से आपको क्रियान्वित किया जाता है। हैंडी!
!<command>
होने वाली आखिरी घटना को अंजाम ~/.bash_history
देंगे<command>
!
मारपीट की गई चीज़ tcsh
ने मुझे उस समय से अधिक बार खराब कर दिया है, जब तक कि यह उपयोगी नहीं है। डबल कोट्स की व्याख्या से रक्षा नहीं करते हैं !
। $ foo "!bar"
-> !bar: event not found
।
उत्तर : आप sudo !!
एस्केलेटेड विशेषाधिकारों के साथ पिछली कमांड को दोहराने के लिए सीधे बाद में प्रवेश करते हैं।
संपादित करें: Reddit के माध्यम से मिली छवि , और यह रान्डेल मुनरो द्वारा मूल xkcd कॉमिक की एक पैरोडी है ।
आप अपने पुराने आदेशों को स्क्रॉल करने और उन्हें फिर से लिखने / बदलने और उनके sudo
सामने जोड़ने के लिए अप-एरो की कोशिश कर सकते हैं। (तीर कुंजियों के ऊपर स्थित होम बटन शुरुआत की स्थिति निर्धारित करेगा।)
मैं इस sudo !!
विचार को नापसंद करता हूं , क्योंकि कभी-कभी आप एक और कमांड जोड़ते हैं और अब याद नहीं करते।
sudo !!
, तो शेल का विस्तार होगा !!
ताकि आप देख सकें कि यह किस कमांड को चलाने की कोशिश कर रहा है। तो, यह Ctrl-C को हिट करने और सही कमांड खोजने के लिए परेशान हो सकता है, लेकिन यह कम से कम आपको अनजान नहीं लगेगा।
!!
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
यह वास्तव में कीस्ट्रोक्स की समान संख्या है (मैं "ctrl + A" को एक के रूप में गिनता हूं ...), लेकिन "अप एरो" को जोड़ने से आप इसे अपने इतिहास में जो भी कर सकते हैं।
set -o vi
) का भी उपयोग कर सकते हैं । फिर आप बच सकते हैं (कमांड मोड पर जाएं), और फिर 'आई' (राजधानी 'आई', लाइन की शुरुआत में डालें)।
इस सवाल को " रन एक ही कमांड लेकिन कुछ संशोधन के साथ " में सामान्यीकृत किया जा सकता था , क्योंकि यूनिक्स में शानदार डिजाइन निर्णयों में से एक यह है कि शेल में एक बार लागू होने वाले किसी भी कमांड को शेल से लागू किया जा सकता है।
दूसरे शब्दों में, यह ट्रिक सिर्फ इस पर लागू नहीं होती है 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
और भी बहुत कुछ, चूंकि आप कमांड चयन, arg-Selection, खोज और स्वतंत्र रूप से प्रतिस्थापित कर सकते हैं।
आपके शेल का पुरुष पृष्ठ (इस मामले में 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 !!)'
किसी कारण से उपयोग करना होगा।
जिस तरह से मैं इसे पसंद करता हूं:
लेकिन यह आसान हो सकता है कि आप केवल "सुडो !!" करें, यह आपके ऊपर है।