답변:
!!
자체 실행은에 저장된대로 이전 명령을 실행합니다 history
. 또한, 일 !-1
, !-2
등등 등등 마지막 명령, 두 번째 마지막 명령 등을 실행합니다. 능숙한!
!<command>
부터 마지막 이벤트를 실행합니다~/.bash_history
<command>
!
bash tcsh
는 복사 된 것 보다 유용했습니다. 큰 따옴표는의 해석에서 보호되지 않습니다 !
. $ foo "!bar"
-> !bar: event not found
.
대답 :sudo !!
이후 에스컬레이션 된 권한으로 이전 명령을 반복하려면 바로 입력하십시오 .
편집 : reddit을 통해 발견 된 이미지 이며 Randall Munroe 의 원래 xkcd 만화 의 패러디입니다 .
위쪽 화살표 키를 사용하여 이전 명령을 스크롤하고 다시 작성 / 변경하고 sudo
앞에 명령을 추가 할 수 있습니다. (화살표 키 위의 홈 버튼은 위치를 시작으로 설정합니다.)
sudo !!
때로는 그 사이에 다른 명령을 추가하고 더 이상 기억하지 않기 때문에 아이디어가 마음에 들지 않습니다.
sudo !!
하면 쉘이 확장 !!
되어 실행하려는 명령을 볼 수 있습니다. 따라서 Ctrl-C를 누르고 올바른 명령을 찾는 것이 자극적 일 수 있지만 적어도 알지 못합니다.
!!
sudo !!<TAB>
하면 자동 완성 !!
됩니다. Bash는 M-^
(alt + shift + 6)으로 역사를 확장 할 수 있지만 유창하지는 않습니다 (이를 리 바인드 할 수는 있습니다). 또한 shopt -s histverify
히스토리 확장을 사용하고 Enter 키를 누를 때 확장을 보거나 편집 할 수 있도록 확장 된 프롬프트 라인을 제공합니다.
shopt -s histverify
단일 비트를 도울 수 없습니다. 대부분의 사람들은 Enter
두 번 때리는 데 익숙해 질 것 입니다. 그 시점에서 그들은 무슨 일이 있었는지 확인하기에는 아직 늦었습니다.
나는 대안을 추가 할 것입니다 : 타이핑 만큼 짧고sudo !!
유연합니다.
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
정확히 같은 수의 키 스트로크 ( "ctrl + A"를 하나로 계산하지만 ...) "위쪽 화살표"를 추가하면 히스토리에있는 명령에 관계없이 수행 할 수 있습니다.
set -o vi
)을 사용할 수도 있습니다 . 그런 다음 이스케이프 (명령 모드로 이동) 한 다음 'I'(자본 'i', 줄 시작 부분에 삽입) 할 수 있습니다.
유닉스에서 훌륭한 디자인 결정 중 하나는 쉘에서 한 번 구현 된 것이 쉘에서 호출 된 명령에 의해 활용 될 수 있기 때문에이 질문은 " 동일한 명령을 실행하지만 약간의 수정만으로 " 일반화 될 수 있습니다.
즉,이 트릭은 적용되지 않습니다 만 합니다 sudo
:
sudo !!
) 로 반복time !!
)env A=b B=z !!
)!!
)히스토리 확장 (히스토리 대체라고도 함)은 이전 명령을보다 쉽게 반복 할 수 있도록하는 키 기능입니다 (키 입력을 줄임). 쉘 매뉴얼 페이지를 확인하십시오 history expansion
. 예를 들어 기록으로 할 수있는 더 많은 트릭과 바로 가기를 설명합니다.
번호로 이전 명령을 참조 할 수 있습니다.
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
이전 명령에서 개별 단어를 참조 할 수 있습니다.
some-command !$ # run some-command on the last arg of previous command
반복하기 전에 검색 할 수도 있습니다.
!?awk # repeat the last command including the string 'awk'
기록을 검색하고 다른 것으로 대체 할 수 있습니다.
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
또한 명령 선택, arg-selection, search 및 replace를 독립적으로 결합 할 수 있으므로 훨씬 더 좋습니다.
쉘의 맨 페이지 (이 경우 man bash
)는 친구입니다.
나는 bash 대신 zsh 를 사용 하고 이것을 내 안에 가지고 ~/.zshrc
있으므로 명령 줄의 시작 부분에 Alt+ S삽입 sudo
을 누르면 :
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
불행히도, 나는 bash에서 같은 일을하는 방법을 추적 할 수 없었다.
내가 선호하는 방식 :
그러나 "sudo !!"를하는 것이 더 쉬울 수도 있습니다. 그것은 당신에게 달려 있습니다.