"sudo!!" 명령에 대한 문서는 어디서 찾을 수 있나요?

"sudo!!" 명령에 대한 문서는 어디서 찾을 수 있나요?

방금 Linux에 마지막으로 입력한 명령에 대해 sudo !!실제로 작동하는 명령이 있다는 것을 배웠습니다 . sudo나는 그것에 대해 들어 본 적이 없습니다.

공유 컨트롤인가요? 이에 대한 문서는 어디서 찾을 수 있나요?

답변1

이것은 단지 bash 단축키입니다. sudo!!그건 그렇고, 이것은 사실이 아닙니다. 예 sudo !!(공백에 주의하세요).

Bash의 명령은 !!기본적으로 이전 명령의 확장입니다.

Bash 매뉴얼 페이지의 "History Expansion" 섹션을 살펴보십시오.

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

답변2

실제로 이는 사용자에게 친숙할 수 있는 명령 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.

답변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

등.

하지만 거기서 끝나지 않았습니다. 쉘은 ! 이벤트 표시기를 전달하는 것 이상의 기능을 수행합니다. 명령을 실행하기 전에 변수 확장, 파일 이름 와일드카드 확장(와일드카드), 명령 대체, 파일/IO 리디렉션 등을 수행합니다. 이들 모두는 쉘에서 호출되는 모든 명령에서 활용 및 사용될 수 있습니다.

또 다른 큰 장점은 시간을 들여 쉘(이 경우 "man bash")을 배우면 한 번만 배우면 되며 이러한 강력한 기능을 언제 어디서나 사용할 수 있다는 것입니다. 각 프로그램이나 유틸리티에서 명령줄 agr이 처리되는 방법을 다시 배우는 것보다 강력한 원칙과 규칙 집합을 배우는 것이 훨씬 쉽습니다.

관련 정보