(참고: 이것은아니요질문이 중복되었습니다. )
명령줄에서 sudo !!
sudo를 사용하여 이전 명령을 실행할 수 있습니다. 하지만 이전 명령에서 별칭을 사용하면 어떻게 될까요?
마찬가지로 별칭을 사용하여 sudo를 통해 이전 명령을 실행하려면 .bashrc 파일에서 다음(또는 다른) 옵션 중 하나를 사용할 수 있습니다.
alias please='sudo "$BASH" -c "$(history -p !!)"'
alias please='sudo $(fc -ln -1)'
alias please='eval "sudo $(fc -ln -1)"'
alias please='function _please(){ eval "sudo $(fc -ln -1)"; }; _please'
alias please='sudo sh -c '"'"'sudo sh -c $(fc -ln -1)'"'"''
alias please="sudo sh -c 'sudo sh -c $(fc -ln -1)'"
alias temp='sudo -s eval $(fc -ln -1)'
please () (
my_source=~
past_command=$(fc -ln -1)
sd ${past_command}
)
나는 이전 명령의 별칭을 사용하여 작동하도록 노력하면서 이들 각각을 시도했습니다. 나는 그것들을 확장하기 위해 사용해 보았고 shopt -s expand_aliases
이 트릭을 사용해 보았습니다 alias sd='sudo '
. 그것들은 모두 일반 명령에서는 잘 작동하지만 sudo는 내 별칭이 무엇인지 전혀 모릅니다.
내 홈 디렉토리에 모든 사용자 정의 옵션을 유지해야 합니다.
sudo sh -c . . .
또한 가능하다면 파이프와 리디렉션과 같은 옵션을 사용하여 sudo 권한도 얻는 것을 선호합니다 .
편집: 이 트릭을 사용하면 명령줄에서는 작동 alias sd='sudo '
하지만 여전히 별칭으로는 작동하지 않는다는 것을 발견했습니다.sd !!
답변1
sudo(에 의해 시작된 쉘) 내부에는 별칭이 정의되어 있지 않습니다.
실제로 시작 시 환경 변수를 제거하고 별칭 정의를 피하는 것이 일반적인 보안 관행입니다 sudo
.
예를 들어 설명하겠습니다.
실행 파일을 만들고 /bin
(루트만 만들 수 있음) 이를 사용자 실행 파일로 정의해 보겠습니다.
# echo $'/bin/sh\necho "running $0 by $USER with $EUID"' >/bin/usercmd
# chmod a+x /bin/usercmd
이 새로운 명령은 사용자 usercmd
나 루트에 의해 간단히 실행될 수 있습니다.sudo usercmd
$ usercmd
running usercmd as isaac with 1027
$ sudo usercmd
running usercmd as root with 0
사용자와 루트 모두 실행 파일을 실행할 수 있습니다.
이제 매우 간단한 별칭을 정의하고 시도해 보겠습니다.
$ alias tcmd='usercmd'
$ tcmd
$ tcmd
running /usr/bin/usercmd as isaac with 1027
$ sudo tcmd
sudo: tcmd: command not found
sudo에는 사용할 수 있는 별칭이 없습니다.
유일한 (일반적인) 해결책은 별칭에서 명령을 추출하는 것입니다.
$ sudo sudo $(alias tcmd | sed 's/[^=]*=//;s/'\''//g')
running /usr/bin/usercmd as root with 0