Tôi có thể tìm tài liệu về lệnh sudo !! ở đâu


20

Tôi mới biết rằng Linux có một sudo !!lệnh áp dụng theo nghĩa đen sudocho lệnh được nhập cuối cùng. Tôi chưa bao giờ nghe về nó.

Đó có phải là một kiểm soát chung? Tôi có thể tìm tài liệu về nó ở đâu?


4
Bạn có thể muốn kiểm tra Commandlinefu.com/commands/browse/sort-by-votes . Một số phím tắt thực sự tốt đẹp ở đó.
Leo

Câu trả lời:


36

Đây chỉ là phím tắt bash. Nhân tiện, nó không phải sudo!!vậy. Đó là sudo !!(lưu ý không gian).

Các !!trong bash cơ bản là một mở rộng của lệnh trước đó.

Hãy xem phần "Mở rộng lịch sử" của trang bash man:

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


Tôi đã chỉnh sửa bài viết trước của tôi, tôi quên không gian như bạn nói!
Cầu tàu-Alexandre Bouchard

Ồ, tôi chưa bao giờ thấy phím tắt này ở bất cứ đâu!
Cầu tàu-Alexandre Bouchard

29

Nó thực sự sudo !!, trong đó bao gồm các lệnh sudo, mà bạn có thể quen, và một vấn thiết kế sự kiện , !!, trong đó đề cập đến lệnh cuối cùng bước vào. Bạn có thể tìm thấy nhiều hơn trong bashtrang người đàn ông, dưới Event Designatorsphần.

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

Sự tách biệt chức năng này là một trong những nguyên tắc thiết kế đẹp nhất làm cho Linux / Unix mạnh hơn rất nhiều so với các lựa chọn thay thế khác trong đó mỗi chương trình là một đảo quy ước và khả năng độc lập riêng biệt.

"làm cho mỗi chương trình làm một việc, và làm tốt"

Thay vì thực hiện !! bên trong sudo (hoặc bất kỳ lệnh nào khác) có thể hưởng lợi từ việc lặp lại lệnh trước đó - nó được thực hiện một lần (trong shell) và tất cả các lệnh có thể được hưởng lợi từ nó. Vì vậy, bạn có thể làm:

$ 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

vân vân

Nhưng nó không kết thúc ở đây. Shell làm nhiều hơn là mở rộng lịch sử thông qua! người chỉ định sự kiện. Trước khi thực hiện lệnh của bạn, nó thực hiện mở rộng biến, mở rộng ký tự đại diện tên tệp (globalbing), thay thế lệnh, chuyển hướng tệp / IO, và nhiều hơn nữa. Tất cả đều có thể được tận dụng và sử dụng trong bất kỳ lệnh nào được gọi từ shell.

Một lợi thế lớn khác là nếu bạn dành thời gian học vỏ của mình ('man bash' trong trường hợp này), bạn cần học nó một lần và bạn có thể sử dụng những khả năng mạnh mẽ này mọi lúc, mọi nơi. Việc tìm hiểu một tập hợp các nguyên tắc và quy ước mạnh mẽ sẽ dễ dàng hơn nhiều, thay vì học lại cách xử lý dòng lệnh trong mỗi chương trình hoặc tiện ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.