मैंने अभी सीखा कि लिनक्स में एक sudo !!
कमांड होती sudo
है, जो कि अंतिम रूप से दर्ज कमांड पर लागू होती है। मैंने इसके बारे में कभी नहीं सुना था।
क्या यह एक सामान्य नियंत्रण है? मैं इसके बारे में दस्तावेज कहां से पा सकता हूं?
मैंने अभी सीखा कि लिनक्स में एक sudo !!
कमांड होती sudo
है, जो कि अंतिम रूप से दर्ज कमांड पर लागू होती है। मैंने इसके बारे में कभी नहीं सुना था।
क्या यह एक सामान्य नियंत्रण है? मैं इसके बारे में दस्तावेज कहां से पा सकता हूं?
जवाबों:
यह सिर्फ बैश शॉर्टकट है। यह sudo!!
वैसे नहीं है। यह sudo !!
(अंतरिक्ष पर ध्यान दें) है।
!!
बैश में मूल रूप से पिछला आदेश का एक विस्तार है।
बैश मैन पेज के "इतिहास विस्तार" अनुभाग पर एक नज़र डालें:
http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators
यह वास्तव में है sudo !!
, आदेश के होते हैं जो sudo
, जिसके साथ आप शायद परिचित हैं, और एक घटना डेसिग्नेटर , !!
है, जो प्रवेश किया पिछले आदेश को दर्शाता है। आप अनुभाग के bash
नीचे, मैन पेज में अधिक पा सकते हैं Event Designators
।
Event Designators
An event designator is a reference to a command line entry in the his‐
tory list. Unless the reference is absolute, events are relative to
the current position in the history list.
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
!n Refer to command line n.
!-n Refer to the current command minus n.
!! Refer to the previous command. This is a synonym for `!-1'.
!string
Refer to the most recent command preceding the current position
in the history list starting with string.
!?string[?]
Refer to the most recent command preceding the current postition
in the history list containing string. The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick substitution. Repeat the previous command, replacing
string1 with string2. Equivalent to ``!!:s/string1/string2/''
(see Modifiers below).
!# The entire command line typed so far.
कार्यक्षमता का यह पृथक्करण लिनक्स / यूनिक्स बनाने वाले सबसे सुंदर डिजाइन सिद्धांतों में से एक है जो अन्य विकल्पों की तुलना में बहुत अधिक शक्तिशाली है जहां प्रत्येक कार्यक्रम सम्मेलनों और क्षमताओं का एक अलग स्वतंत्र द्वीप है।
"प्रत्येक कार्यक्रम को एक काम करो, और इसे अच्छे से करो"
लागू करने के बजाय !! सुडो (या कोई अन्य कमांड) के अंदर जो पिछली कमांड को दोहराने से लाभान्वित हो सकता है - इसे एक बार (गोले में) लागू किया जाता है और सभी कमांड इससे लाभ उठा सकते हैं। तो आप कर सकते हैं:
$ echo !! # will echo the last command
$ time !! # will repeat and time the last command
$ strace !! # will repeat the last program while system-call tracing it
और इसी तरह।
लेकिन यह यहाँ समाप्त नहीं होता है। खोल के माध्यम से इतिहास का विस्तार करने की तुलना में बहुत अधिक है! इवेंट डिज़ाइनर। अपनी कमांड निष्पादित करने से पहले, यह चर विस्तार, फ़ाइल नाम वाइल्डकार्ड विस्तार (ग्लोबिंग), कमांड प्रतिस्थापन, फ़ाइल / आईओ पुनर्निर्देशन, और बहुत कुछ करता है। जिनमें से सभी का लाभ उठाया जा सकता है और शेल से आह्वान किए जाने वाले किसी भी आदेश में उपयोग किया जा सकता है।
एक और बड़ा लाभ यह है कि यदि आप अपना खोल (इस मामले में 'मैन बैश') सीखने में कुछ समय बिताते हैं, तो आपको इसे एक बार सीखने की जरूरत है और आप हर समय, हर समय इन शक्तिशाली क्षमताओं का उपयोग कर सकते हैं। प्रत्येक कार्यक्रम या उपयोगिता में कमांड लाइन एगर्स को कैसे संभाला जाए, इसके बजाय शक्तिशाली सिद्धांतों और सम्मेलनों के एक सेट को सीखना बहुत आसान है।