sudo !!
Bash에서 별칭을 설정하려고 합니다. '를 시도했지만 alias sbb='sudo !!
텍스트로 해석하여 !!
인쇄합니다.
sudo: !!: command not found
큰따옴표를 사용하면 문자열 자체에 있는 이중 느낌표가 바뀌므로 작동하지 않습니다.
이 작업을 수행할 수 있는 방법이 있나요? 아니면 다른 별칭인가요? `
답변1
!!
입력하면 bash에 의해 확장됩니다. 별칭 대체를 통해 확장되지 않습니다.
history
내장 기능을 사용하여 확장 할 수 있습니다 .
alias sbb='sudo $(history -p !!)'
명령이 단순한 명령 이상인 경우(예: 리디렉션 또는 파이프가 포함된 경우) sudo에서 셸을 호출해야 합니다.
alias sbb='sudo "$BASH" -c "$(history -p !!)"'
답변2
노력하다:
alias sbb='sudo $(fc -ln -1)'
나는 실제로 "제발"이라는 이름을 선호합니다.
alias please='sudo $(fc -ln -1)'
정보:fc
bash 쉘에 내장된 명령입니다. 이전에 대화형 셸에 입력한 명령을 나열하고, 편집하고, 다시 실행합니다.
!!
Zsh에는 별칭과 비슷한 문제가 있으며 fc -ln -1
거기서도 작동합니다. sudo 명령줄 내에서 리디렉션 및 기타 셸 구문 가져오기에 대한 주의 사항이 적용되지만 명령을 셸 호출로 래핑하거나 eval
다음을 참조 할 수 있습니다.@rici의 답변.
답변3
이제 이 목적을 위해 GitHub에 저장소가 있습니다. 이 저장소는 수퍼유저 권한이 필요한지 마술처럼 확인하고 오타도 수정합니다.
답변4
이것은 원래 게시되었습니다이것질문이 있는데 여기에 게시할 것을 제안했습니다.
유사한 대체를 수행하기 위해 fc
및 별칭을 사용하는 방법은 다음과 같습니다 . 다음을 사용하고 싶다고 가정합니다 (여기서history
!-
!-n
N는 마지막으로 사용한 n번째 명령의 번호입니다 .) 다음과 같은 별칭을 사용하여 fc
및 를 사용할 수 있습니다 .history
사용
history
:alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'
참고: 이는 또는 로 묶어야
!-n
합니다 .'
''
사용
fc
:alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'
참고: 여기서 첫 번째 와 두 번째는 기록 목록의 범위를 지정 하는 데 사용됩니다 .
-n
여기서는 명령을 실행하기 전에 echo-ing을 사용하여 !-<n>
.