방금 Linux 에 마지막으로 입력 한 명령에 sudo !!
적용되는 명령이 있다는 것을 알게되었습니다 sudo
. 나는 그것에 대해 들어 본 적이 없다.
이것이 일반적인 통제입니까? 그것에 관한 문서는 어디서 찾을 수 있습니까?
방금 Linux 에 마지막으로 입력 한 명령에 sudo !!
적용되는 명령이 있다는 것을 알게되었습니다 sudo
. 나는 그것에 대해 들어 본 적이 없다.
이것이 일반적인 통제입니까? 그것에 관한 문서는 어디서 찾을 수 있습니까?
답변:
이것은 바로 bash 단축키입니다. 그건 sudo!!
그렇고 아닙니다 . 그건 sudo !!
(공간주의).
!!
bash는 기본적으로 이전 명령의 확장이다.
bash 매뉴얼 페이지의 "History Expansion"섹션을 살펴보십시오.
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.
이러한 기능 분리는 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이 처리되는 방식을 다시 배우기보다는 강력한 일련의 강력한 원리와 규칙을 배우는 것이 훨씬 쉽습니다.