Programing

"sudo"로 마지막 명령 반복

crosscheck 2020. 12. 14. 07:53
반응형

"sudo"로 마지막 명령 반복


나는 종종 sudo. 마지막 명령을 반복하기 위해 bash 함수 (또는 별칭)를 만드는 방법을 찾고 sudo있습니다. 다음과 같은 것 :

S() {
    sudo $(history 1)
}

어떤 아이디어?


당신은 쓸 수 있습니다:

sudo !!

( Bash Reference Manual 의 §9.3 "History Expansion"을 참조하십시오 .)


충분하지 않은?

sudo !!

S간단하게 넣으 려면 다음을 수행하십시오 .

alias S=sudo

그리고 그것을 사용하십시오

S !!

!!평균last command


사용 alias redo='sudo $(history -p !!)'. 이것은 별칭과 함께 작동하는 유일한 것입니다. 다른 답변은 직접 실행할 때 작동하더라도 어떤 이유로 별칭에서 작동하지 않습니다.


!!마지막 명령을 참조하는 데 사용할 수 있습니다. 그래서:

sudo !!

aaron franke 의 응답 에 추가 및 확장 (정확하지만 이유가 없음 ) redo하여 별칭을 구성한 후 간단히 입력하면 작동합니다 alias redo='sudo $(history -p !!).

이것은 별칭과 함께 작동하는 유일한 것입니다.

그 정당한 설명에 몇 가지가 있습니다.

alias redo='sudo !!'

sudo부분을 실행하지 않기 때문에 작동하지 않지만 !!.

sudo !!올바르게 해결 하려면 셸 해결 지시문을 실행하고와 함께 연결해야 sudo합니다. 그래서 우리는합니다.

alias redo='sudo $(history -p !!)'

별칭의 오른쪽을에 지정함으로써 $(history -p !!)이것이하는 일은 쉘에 말하는 것입니다.

  1. redo 별칭이며 오른쪽을 평가합니다. =
  2. sudo 그대로 유지되고 다음과 연결됩니다.
  3. $()현재 실행 프로세스 내에서 내용을 실행하는 셸 지시문입니다 ( ${}다른 프로세스를 생성하여 실행 하는 하위 셸과 반대 ).
  4. 결의 history -p !!
  5. !!확장 도착 history -p <lastCommandHere>4 단계의 결과.
  6. -p부분에 말한다 history결과 만 인쇄하려면 실행하지
  7. sudo암호가 올바르게 입력되었다고 가정하고 상승 된 권한으로 나머지 (이제 동일한 명령 줄에 인쇄 됨)를 실행합니다.

이것은 궁극적으로 명령 history -p !!sudo.

참고 : '중요합니다. 당신이 사용하는 경우 "는이 !!두 번 보간됩니다 우리는 매우 신중하게 해결 단계를 제어해야하는 우리의 목적을 달성하기 위해; bash의 작은 따옴표 / 큰 따옴표

추신

zsh+를 사용하는 경우 할 수 oh-my-zsh있는 sudo별칭 설정 _이 있습니다.

_ !!

마지막 명령을 sudo. 당신이 별칭을 구성하는 경우 그러나, ~/.zshrc1, alias redo='sudo $(history -p !!)하지 않습니다 작업 해상도 단계가 다른 같은 zsh을의 설정에서 때문이다.

That said, you can put the alias into ~/.bashrc instead of ~/.zshrc and have the same result when executing the alias redo from zsh (assuming you're sub-shelling zsh from bash, though this is admittedly a bit of a kludge - though a functional one).

참고URL : https://stackoverflow.com/questions/17245614/repeat-last-command-with-sudo

반응형