방금 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이 처리되는 방법을 다시 배우는 것보다 강력한 원칙과 규칙 집합을 배우는 것이 훨씬 쉽습니다.