कैसे मैं `उर्फ सुडो !!


50

मैं sudo !!बैश में एक उपनाम स्थापित करने की कोशिश कर रहा हूं । मैंने कोशिश की alias sbb='sudo !!', लेकिन यह एक शाब्दिक !!और प्रिंट के रूप में व्याख्या करता है

sudo: !!: command not found

अगर मैं दोहरे उद्धरण चिह्नों का उपयोग करता हूं, तो यह स्ट्रिंग में ही डबल बैंग का विकल्प देता है, ताकि काम न करे।

क्या यह काम करने का कोई तरीका है? या एक वैकल्पिक उपनाम? `



जवाबों:


61

!!जब आप इसे टाइप करते हैं तो इसे bash द्वारा विस्तारित किया जाता है। यह उर्फ ​​प्रतिस्थापन द्वारा विस्तारित नहीं है।

आप historyअंतर्निहित विस्तार करने के लिए उपयोग कर सकते हैं :

alias sbb='sudo $(history -p !!)'

यदि कमांड एक साधारण कमांड से अधिक है (जैसे इसमें पुनर्निर्देश या पाइप शामिल हैं), तो आपको sudo के तहत एक शेल को इनवोक करना होगा:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

टीसीएस के लिए एक मिला?
mdpc 19

1
@ mdpc: मैं tcsh का उपयोग नहीं करता, लेकिन मैंने इस पर नज़र डाली man tcshऔर पता लगाया कि यह उपनाम विस्तार के दौरान इतिहास का विस्तार करता है "जैसा कि मूल कमांड पिछले इनपुट लाइन थे।" दिलचस्प। हालांकि, alias sbb 'sudo \!-2उम्मीद के मुताबिक काम नहीं किया (यह वास्तव में दूसरी पिछली प्रविष्टि को प्रतिस्थापित करता है); alias sbb 'sudo \!\!'उम्मीद के अनुसार काम किया (के sbbलिए प्रतिस्थापित !!); और अंत में यह पता चला कि मैं alias sbb 'sudo \!-1'जो चाहता था , मैं वैसा ही होने की उम्मीद करूंगा \!\!। (tcsh 6.17.06 (Astron) 2011-04-15) YMMV। सौभाग्य।
रिसी

धन्यवाद! यह उपनाम बहुत अच्छा है जब व्यवस्थापक के रूप में आप अपने कमांड के सामने sudo रखना भूल जाते हैं।
mdpc

इसके बजाय sbbमैं prease@jpschorr द्वारा सुझाए गए उपनाम के रूप में पसंद करूंगा
rubo77

40

प्रयत्न, कोशिश:

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

मैं वास्तव में इसे 'कृपया' नाम देना पसंद करता हूं:

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

जानकारी: fcबैश शेल में एक इन-बिल्ट कमांड है। वह सूचियाँ, संपादन और पुनर्निदेशक आदेश पहले एक इंटरेक्टिव शेल में प्रविष्ट हुए।


13
pleaseनिश्चित रूप से जाने का रास्ता है!
अन्टो

बाश के लिए काम करता है इसलिए 'zsh के लिए' टिप्पणी को हटा दिया।
माइकल ड्यूरेंट

1
Zsh में अच्छी तरह से काम करता है। fc उपयोग करने का कमांड है। धन्यवाद
Frax

pleaseयह महसूस करता है कि टर्मिनल एक इकाई है जिसे सामान प्राप्त करने के लिए मुझे अच्छा होना चाहिए। मैं कुछ ऐसा पसंद करता हूं जो नियंत्रण की बेहतर समझ देता है - जैसे fuck;)
प्रेज़ेमेक डी

5

अब GitHub में इस उद्देश्य के लिए एक रिपॉजिटरी है, यह जादुई रूप से जांचता है कि क्या इसे सुपरयुसर अधिकारों की आवश्यकता है, टाइपर्स को भी ठीक करता है:

https://github.com/nvbn/thefuck


मैंने कोशिश की apt-get install thefuckजो मौजूद है, लेकिन यह मेरे Ubuntu 15.10 पर काम नहीं करता है ;
rubo77

0

यह मूल रूप से इस प्रश्न पर पोस्ट किया गया था , लेकिन बाद में, यहां पोस्ट करने का सुझाव दिया गया।

यहाँ है कि आप कैसे उपयोग कर सकते हैं fcऔर historyउपनाम के !-साथ प्रतिस्थापन के लिए। आप उपयोग करना चाहते हैं मान लीजिए !-n(जहां n n के लिए अंकों है वें अंतिम बार उपयोग कमांड), तो आप उपयोग कर सकते हैं fcऔर historyइस प्रकार उर्फ साथ:

  1. का उपयोग कर history:

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    नोट: यहां या उसके !-nसाथ संलग्न होना चाहिए ।'''

  2. का उपयोग कर fc:

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    नोट: यहां 1 सेंट और 2 एनडी -n का उपयोग इतिहास सूची की सीमा को निर्दिष्ट करने के लिए किया जाता है।

यहाँ मैंने जैसे फेलिंग के लिए कमांड निष्पादित करने से पहले इको-इन का उपयोग किया !-<n>


पिछले जवाब पहले से ही कवर history -pऔर fc। यहाँ कुछ नया?
मुरु

ठीक है, यह क्या है?
मुरु

मुझे लगता है कि -ln -n -nयह बहुत ही भ्रामक है; बिट के बारे में भी 'या ''(और बिट के बारे में भी -<n>)।
स्कॉट

विकल्प 2. एक टाइपो होना चाहिए, मुझे लगता है कि आप चाहते हैं$(fc -ln -1)
cmcginty

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.