sudo bash 함수에서 (일부) 별칭 확장

sudo bash 함수에서 (일부) 별칭 확장

sudo나는 두 가지를 원합니다. 1) 캐시된 자격 증명을 입력할 때마다 업데이트하여 정기적으로 계속 사용하는 경우 비밀번호를 묻지 않기를 원합니다 sudo. 2) (누군가) 별칭을 사용할 때 sudo를 사용할 수 있습니다.

자격 증명을 업데이트하려면 이 작업을 실행해야 합니다 sudo -v(명령이 필요하지 않음).

예를 들어, 나는 /usr/bin/vi하나 /usr/bin/nvim의 별칭을 가지고 있습니다.

alias vi='/usr/bin/nvim'

따라서 루트가 아닌 사용자로 입력하면 다음과 같습니다.

sudo vi /etc/fstab

그런 다음 다음을 실행하고 싶습니다.

sudo -v
sudo /usr/bin/nvim /etc/fstab

나는 bash 함수를 생성하여 이를 달성하려고 했습니다.

function sudo()
{
  command sudo -v
  command sudo "$@"
}

그러나 이로 인해 오류가 발생합니다.

sudo: vi: command not found

즉, 별칭은 vi함수 내에서 "$@"확장 되지 않습니다 sudo.

이 문제를 어떻게 해결할 수 있나요?

답변1

아마도

function sudo()
{
  command sudo -v
  if [[ $(type -t "$1") == "alias" ]]; then
    set -- bash -ic "$(alias "$1"); $(printf "%q " "$@")"
  fi
  # what am I about to execute
  printf "%q " sudo "$@"; echo
  # and do it
  command sudo "$@"
}

답변2

Camille의 alias sudo='sudo -v; sudo '답변은 sudo가 별칭인 경우 sudo 다음의 첫 번째 단어를 확장하는 Glenn의 답변과 동일하게 유효하지만 별칭을 "맹목적으로" 확장하는 것은 보안 문제로 간주될 수 있습니다.

주어진 visudo가능한 구성

/etc/sudoers:

Defaults editor=/usr/bin/nvim, !env_editor

EDITOR환경 변수(역시 보안 위험)를 무시 하고 항상 켜져 /etc/sudoers있거나 다음 bash 기능을 사용할 수 있습니다( 편집기로 입력하는 /usr/bin/nvim데 익숙하다고 가정 ).vi

~/.bashrc:

sudo ()
{ 
    command sudo -nv 2> /dev/null;
    COMMAND="$1";
    shift;
    [ "$COMMAND" = "vi" ] && COMMAND="/usr/bin/nvim";
    command sudo "$COMMAND" "$@"
}

이것은 또한 허용합니다

sudo vi /etc/fstab

하지만 항상 /usr/bin/nvim별칭을 확장하지 않고 사용하세요.

또한 sudo -nvvs. sudo -v​이는 실제 명령에 암호가 필요하지 않은 경우 후자에서 암호를 요구하지 않도록 하기 위한 것입니다.

관련 정보