sudo -u를 사용하세요쉘 스크립트에서 명령 실행

sudo -u를 사용하세요쉘 스크립트에서 명령 실행

나는 매우 게으르고 소프트웨어를 자동으로 컴파일하는 스크립트를 작성하는 것을 선호합니다. 나에게는 이러한 스크립트가 상당히 길 수 있기 때문에 루트로 실행하는 것이 더 쉽지만 개별 소프트웨어를 권한이 없는 사용자로 컴파일하는 것이 더 쉽습니다(따라서 sudo -u ). 과거에는 이 작업을 수행할 수 있었지만 지금은 조건이 평가되지 않아 문제가 발생합니다. 그래서 다음과 같습니다.

sudo -u name if [ ! -f $HOME/file ];then echo "file not found";fi

정말 죽겠어요...그냥 then...이걸 어떻게 고칠 수 있나요?

답변1

넌 할 수있어:

sudo -H -u name bash -c '[ -f "$HOME"/file ] || echo "file not found"'

[ -f "$HOME"/file ] || echo "file not found"당신이 원하는 대로 정확하게 하세요 if..then.

에서 man sudo:

-H, --홈 페이지 설정

보안 정책이 HOME 환경 변수를 대상 사용자의 비밀번호 데이터베이스 항목에 지정된 홈 디렉토리로 설정하도록 요청합니다. 정책에 따라 이는 기본 동작일 수 있습니다.

답변2

현재 쉘은 세미콜론을 보고 sudo거기서 명령을 종료합니다. 따라서 sudo에서는 세미콜론만 볼 수 있습니다 if [ ! -f $HOME/file ].

  1. 특수 문자를 피하거나
  2. 전체 sudo 명령을 인용하거나(테스트되지 않음)
  3. 명령을 (필요한 경우 임시) 쉘 스크립트에 넣고 sudo를 스크립트에 지정하십시오.

관련 정보