sudo에서 이전 명령을 다시 실행


8

적절한 권한이 없기 때문에 명령을 실행할 수 있기를 원합니다. 그런 다음 방금 실행 한 명령을 sudo하기 위해 "please"를 작성할 수 있습니다.

터미널에서 수행하고 싶은 작업은 다음과 같습니다.

$ run command
"you don't have access to do that"
$ please
"ran successfully"

나는 그것이 !!이전 명령을 잡는 것을 보았 으므로 사용할 수 있다고 생각했지만 작동시키지 못했습니다.

내 please.sh 셸 스크립트는 다음과 같지만 작동하지 않습니다. 그냥 "명령을 찾을 수 없습니다!" sudo 사용법을 인쇄합니다.

#!/bin/zsh

#sudo !!
#sudo `!!`
sudo $(!!)

스크립트없이 작동합니까? 방금 실행하면 sudo !!예상대로 실행됩니까? 나는 생각한다! bash 별칭 일 수 있으므로 zsh에서는 작동하지 않을 수 있습니다.
Chris Wayne

3
AFAIK, 히스토리 확장 ( !!및 기타)은 대화식 쉘에서만 작동하며 스크립트에서는 작동하지 않습니다.
Thor

sudo !!대화식 모드에서는 거의 예상대로 작동합니다. Enter 키를 누르면 !!이전 명령으로 바뀝니다. 그런 다음 Enter 키를 다시 눌러 실행해야했습니다.
jb.

답변:


6

!!하위 쉘의 상위 쉘에 액세스 할 수 없으므로 쉘 스크립트에서 사용할 수 없습니다. 을 사용하는 것이 좋지만 sudo !!BASH 스크립트를 만들고 싶다면 .bash_history를 사용해야합니다.

#!/bin/bash
sudo `cat $HOME/.bash_history | tail -n1`

완벽한 솔루션은 아니지만 트릭을 수행해야합니다. ZSH를 사용하는 경우 ZSH가 .bash_history (내 지식)로 출력하지 않으므로 작동하지 않습니다. 업데이트 : ZSH와 함께 작동 해야하는 버전은 다음과 같습니다.

#!/usr/bin/zsh
. $HOME/.zshrc
sudo `cat \`readlink -f $HISTFILE\` | tail -n1`

도움이 되었기를 바랍니다!

스크립트를 이해하지 못하면 sudo를 사용하여 BASH에 입력 한 마지막 명령을 실행합니다.


확인. 그래도 zsh를 사용하고 있습니다. zsh에 .bash_history에 해당하는 것이 있습니까?
jb.

예, 이제 작동해야 할 버전이 있습니다. 그래도 아직 테스트하지 않았습니다.
MiJyn

bash 기록 파일을 직접 읽지 마십시오. fc또는 history내장을 사용하십시오 . 기본적으로 $ HISTFILE은 bash에서 로그 아웃 할 때까지 업데이트되지 않습니다.
Steven K

24

.zshrc에 추가하십시오.

alias please='sudo $(fc -ln -1)'

치료법을 사용하며 사용하기 쉽도록 위의 대답보다 낫습니다.
Mitchell Currie

2
궁금한 점 fc은 수정 명령을 나타냅니다. 설명서는 여기에 있습니다 .
dshepherd

감사합니다! 나는 이것이 AskUbuntu라는 것을 알고 있지만 OSX에서 이것을 사용하여 마지막 명령을 시스템 클립 보드에 복사했습니다. alias lastcmd="fc -ln -1 | pbcopy"Ubuntu에서 작동해야한다고 생각합니다 (?) alias lastcmd="fc -ln -1 | xclip -selection clipboard.
HellaMad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.