나는 매우 게으르고 소프트웨어를 자동으로 컴파일하는 스크립트를 작성하는 것을 선호합니다. 나에게는 이러한 스크립트가 상당히 길 수 있기 때문에 루트로 실행하는 것이 더 쉽지만 개별 소프트웨어를 권한이 없는 사용자로 컴파일하는 것이 더 쉽습니다(따라서 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 ]
.
- 특수 문자를 피하거나
- 전체 sudo 명령을 인용하거나(테스트되지 않음)
- 명령을 (필요한 경우 임시) 쉘 스크립트에 넣고 sudo를 스크립트에 지정하십시오.