어떻게 `별칭 sudo !!`를 할 수 있나요?

어떻게 `별칭 sudo !!`를 할 수 있나요?

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)'

정보:fcbash 쉘에 내장된 명령입니다. 이전에 대화형 셸에 입력한 명령을 나열하고, 편집하고, 다시 실행합니다.

!!Zsh에는 별칭과 비슷한 문제가 있으며 fc -ln -1거기서도 작동합니다. sudo 명령줄 내에서 리디렉션 및 기타 셸 구문 가져오기에 대한 주의 사항이 적용되지만 명령을 셸 호출로 래핑하거나 eval다음을 참조 할 수 있습니다.@rici의 답변.

답변3

이제 이 목적을 위해 GitHub에 저장소가 있습니다. 이 저장소는 수퍼유저 권한이 필요한지 마술처럼 확인하고 오타도 수정합니다.

https://github.com/nvbn/thefuck

답변4

이것은 원래 게시되었습니다이것질문이 있는데 여기에 게시할 것을 제안했습니다.

유사한 대체를 수행하기 위해 fc및 별칭을 사용하는 방법은 다음과 같습니다 . 다음을 사용하고 싶다고 가정합니다 (여기서history!-!-nN는 마지막으로 사용한 n번째 명령의 번호입니다 .) 다음과 같은 별칭을 사용하여 fc및 를 사용할 수 있습니다 .history

  1. 사용history:

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'
    

    참고: 이는 또는 로 묶어야 !-n합니다 .'''

  2. 사용fc:

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'
    

    참고: 여기서 첫 번째 두 번째는 기록 목록의 범위를 지정 하는 데 사용됩니다 . -n

여기서는 명령을 실행하기 전에 echo-ing을 사용하여 !-<n>.

관련 정보