내 경로에 bin 디렉터리를 추가했는데 "sudo 명령"을 사용하여 해당 디렉터리에서 명령을 실행할 수 없습니다.

내 경로에 bin 디렉터리를 추가했는데 "sudo 명령"을 사용하여 해당 디렉터리에서 명령을 실행할 수 없습니다.

bin모든 스크립트가 배치되는 홈 폴더에 디렉터리를 만들었습니다 . 그런 다음 내 .bashrc에 다음을 추가했습니다.

export PATH=$PATH:/home/myusername/bin

이렇게 하면 내가 넣은 파일을 어디서나 액세스할 수 있습니다. 그러나 일부 스크립트는 루트로 실행되어야 합니다. 그래서 나는 내 .bashrc를 루트로 심볼릭 링크할 수 있다고 생각했습니다(예: /root/.bashrc가 /home/myusername/.bashrc를 가리키는데, 그것이 현명한 것인지는 모르겠습니다). 그래서 루트로 스크립트를 실행해야 할 때 다음 작업만 수행할 수 있습니다.

sudo program_that_requires_root

하지만 나는 다음과 같은 결과를 얻습니다.

sudo: program_that_requires_root: command not found

루트로 로그인해서 프로그램을 실행하면 잘 작동됩니다. 그렇다면 내가 원하는 것을 달성하는 올바른 방법은 무엇입니까?

답변1

sudoers 파일에 이 두 줄이 있는지 확인해야 합니다.

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$

자세한 내용은 다음 URL을 참조하세요.

답변2

sudo대부분의 구성에서는 환경 변수를 PATH기본 제공 값이나 관리자가 제공한 기본값으로 재설정합니다. 그래서 그냥 입력할 수는 없습니다 sudo myscript.

래퍼 함수를 ​​작성할 수 있습니다.

sudo () {
  local cmd
  case $1 in
    -*) :;; # there are options, change nothing
    */*) :;; # explicit path, change nothing
    *) # a command name, look it up in our $PATH
      cmd=$(type -p -- "$1")
      if [[ -n $cmd ]]; then shift; set -- "$c" "$@"; fi;;
  esac
  command sudo "$@"
}

(이것은 bash에서 작동합니다. ksh 또는 zsh type -P로 변경하십시오.)type -p

답변3

기본적으로 sudo는 환경을 재설정합니다. 루트의 .bashrc에 경로를 추가해 보셨나요? 또는 -E를 사용하여 sudo를 호출합니다(sudoers의 setenv가 설정되었거나 해당 명령에 SETENV 플래그가 설정된 경우에만 유효함).

관련 정보