여러 기능을 사용하여 bash 스크립트에서 sudo 명령을 실행하시겠습니까?

여러 기능을 사용하여 bash 스크립트에서 sudo 명령을 실행하시겠습니까?

내가 사용한 스크립트에서기본이 함수는 모든 sudo 작업을 완료하기 위해 새로운 sudo-bash를 생성합니다.

#!/bin/bash
function sudo_stuffs() { 
  install_ss
}
function install_ss() {
  echo something
}



main() {
  # 切换目录
  cd /tmp 
  if [[ ! -d "install_shadowsocks" ]]; then
    mkdir install_shadowsocks
  fi
  cd install_shadowsocks

  # 如果没有sudo权限
  if ! sudo -v 1>/dev/null 2>&1 ; then
    # 提示登录有权限的账户 
    echo "--- You don't have authority, login to the root or others in sudoers. ---"
    exit 1
  fi

  export -f install_ss
  FUNC=$(declare -f sudo_stuffs)
  sudo bash -c "$FUNC; sudo_stuffs"
}

main "$@"

하지만 실제로는sudo_stuffs기능과 더 자세한 기능은 다음과 같습니다. 설치_SS기능.

나는 export -f install_ssinstall_ss가 using이라는 하위 쉘에서 발견될 수 있는지도 확인했습니다 sudo bash -c "$FUNC; sudo_stuffs".

하지만 결과는 아직 나왔어

bash: 2행: install_ss: 명령을 찾을 수 없음

어떡해?

답변1

를 사용하지 마십시오 function. 즉, 2-4행은 다음과 같습니다.

sudo_stuffs() { 
  install_ss
}

그런 다음 호출하려면 다음을 사용하십시오.

sudo_stuffs

마지막으로, 사용자가 루트가 아닐 때 루트 권한을 얻으려면 스크립트 시작 부분(1번째 줄 뒤)에 다음 3줄을 추가하세요. sudo이는 사용자에게 실행 권한이 있는지 확인 sudo하고 (보통) 비밀번호를 묻는 스크립트를 실행하여 수행됩니다 .

if [ `id -u` -gt 0 ]; then
    exec sudo "$0" "$@"
fi

답변2

중복된 항목을 찾았지만 StackExchange의 규칙에 따라 설정할 수 없습니다.

그래서 여기에 게시합니다.

https://askubuntu.com/questions/57915/environment-variables-when-run-with-sudo

명령이 누락된 실제 이유는 명령이 셸에서 내보낸 환경 변수를 삭제하므로 sudo에 의해 생성된 하위 셸이 함수가 sudo무엇인지 알 수 없기 때문입니다 .install_ss

답변3

귀하의 라인 sudo bash -c "$FUNC; sudo_stuffs" 나에게는 잘못된 것 같습니다. sudo -c 뒤에는 따옴표로 묶은 실행하려는 명령, 닫는 따옴표, 마지막에는 명령을 실행할 사용자 이름이 와야 합니다.

sudo -c "bash FUNC sudo_stuffs" MY_USERNAME

이런 식으로 함수를 호출하는 것이 가능한지 잘 모르겠습니다. 저는 보통 스크립트에서 함수를 호출하는데, 함수를 구성하는 명령이 특정 사용자로 실행되도록 하려면 함수에 suco -c "command" my_username 을 추가하면 됩니다.

관련 정보