ฉันสามารถหาเอกสารเกี่ยวกับคำสั่ง“ sudo !!” ได้ที่ไหน


20

ฉันเพิ่งเรียนรู้ว่า Linux มีsudo !!คำสั่งที่ใช้sudoกับคำสั่งที่ป้อนล่าสุดอย่างแท้จริง ฉันไม่เคยได้ยินเรื่องนี้เลย

นั่นคือการควบคุมร่วมกันหรือไม่? ฉันจะหาเอกสารเกี่ยวกับมันได้ที่ไหน


4
คุณอาจต้องการที่จะตรวจสอบcommandlinefu.com/commands/browse/sort-by-votes ทางลัดที่ดีบางอย่างนั้น
Leo

คำตอบ:


36

นี่เป็นเพียงช็อตคัทบีช มันไม่ได้sudo!!เป็นอย่างนั้น มันคือsudo !!(จดบันทึกช่องว่าง)

!!ในทุบตีเป็นพื้นการขยายตัวของคำสั่งก่อนหน้า

ดูที่ส่วน "การขยายประวัติ" ของหน้าคนทุบตี:

http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators


ฉันแก้ไขโพสต์ก่อนหน้าของฉันฉันลืมพื้นที่ตามที่คุณพูด!
Pier-Alexandre Bouchard

โอ้ฉันไม่เคยเห็นทางลัดนี้เลย!
Pier-Alexandre Bouchard

29

เป็นจริงsudo !!ซึ่งประกอบด้วยคำสั่งsudoด้วยซึ่งคุณอาจจะคุ้นเคยและdesignator เหตุการณ์ , !!ซึ่งหมายถึงคำสั่งสุดท้ายที่ป้อน คุณสามารถหาข้อมูลเพิ่มเติมได้ในbashหน้า man ภายใต้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.

3

การแยกฟังก์ชั่นนี้เป็นหนึ่งในหลักการการออกแบบที่สวยงามที่สุดที่ทำให้ Linux / Unix มีประสิทธิภาพมากกว่าตัวเลือกอื่น ๆ โดยที่แต่ละโปรแกรมเป็นเกาะที่แยกออกจากการประชุมและความสามารถอิสระ

"ทำให้แต่ละโปรแกรมทำสิ่งหนึ่งและทำได้ดี"

แทนที่จะใช้ !! ภายใน sudo (หรือคำสั่งอื่น ๆ ) ซึ่งสามารถได้รับประโยชน์จากการทำซ้ำคำสั่งก่อนหน้า - มันถูกนำมาใช้ครั้งเดียว (ในเชลล์) และคำสั่งทั้งหมดจะได้ประโยชน์จากมัน ดังนั้นคุณสามารถทำได้:

$ 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

และอื่น ๆ

แต่มันไม่จบที่นี่ เปลือกทำอะไรได้มากกว่าการขยายประวัติศาสตร์ผ่านทาง! นักออกแบบเหตุการณ์ ก่อนที่จะดำเนินการคำสั่งของคุณมันจะขยายตัวตัวแปร, การขยายตัวตัวแทนชื่อไฟล์ (globbing), การทดแทนคำสั่ง, การเปลี่ยนเส้นทางไฟล์ / IO และอื่น ๆ อีกมากมาย ซึ่งสามารถยกระดับและใช้ในคำสั่งใด ๆ ที่ถูกเรียกใช้จากเชลล์

ข้อได้เปรียบที่สำคัญอีกอย่างหนึ่งคือถ้าคุณใช้เวลาในการเรียนรู้เชลล์ของคุณ ('man bash' ในกรณีนี้) คุณจำเป็นต้องเรียนรู้มันครั้งเดียวและคุณสามารถใช้ความสามารถอันทรงพลังเหล่านี้ได้ทุกที่ทุกเวลา เป็นการง่ายกว่าที่จะเรียนรู้หลักการและข้อตกลงที่ทรงพลังหนึ่งชุดแทนที่จะเรียนรู้วิธีจัดการบรรทัดคำสั่งในแต่ละโปรแกรมหรือยูทิลิตี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.