저는 전 Windows 사용자이고 Unix 쉘에 문제가 있습니다.
su - $USER -p -c "$CMD"
this one과 같은이 명령은 주어진 환경의 경로 변수에 액세스해야하지만 그렇지 않습니다. su - $USER -p -c "export PATH=$PATH; $CMD"
으로 변경하면 예상대로 작동합니다. (나는 짐작한다).
init 스크립트에서이 코드를 시도하고 있는데이 질문과 관련하여 다른 질문이 있습니다. here (죄송합니다 중복에 대한,하지만 난 여기서 물어 올바른 장소입니다 확신합니다.) su - $USER -c $CMD
잊어가 이전에 ENV 변수를 정의하는 이유
- 첫 번째 질문은?
- 나는
-
을 제거 시도,su - $USER -p -c "export PATH=$PATH; $CMD"
편집
su $USER -p -c "whoami && echo $PATH && $CMD"
같은 명령 내부 경로를 삽입하는 올바른 방법 그것입니다. 그래도 작동이 안되는.- 다음 명령으로 실험 할 때
su - $USER -p -c "whoami && echo $PATH && $CMD"
$ user 및 $ path가 올바르게 설정되어 있습니다. 하지만 여전히 $ PATH 아래에서 바이너리를 찾을 수 없습니다.
편집-2
나는 몇 가지 더 실험을했고 나는 작업 형태의 짧은 왔습니다 : su $USER -c "PATH=$PATH; $CMD"
합니다. 이것이 최선의 관행인지 확실하지 않습니다.
스와'때문에 '의도적으로 부모의 환경을 보존하지 않습니다. 맹목적으로 그렇게하는 것이 보안 문제 일 것입니다. 환경을 보존하기 위해'-m' /'-p' 플래그가 있습니다. 그러나 이와 같은 것에 대한 해결책은 아마 더 좋습니다 ('export' 비트는 필요 없습니다). –
'su'동작을 설명해 주셔서 감사합니다. 답변에 대한 응답으로 내 질문을 편집했습니다. 'su'는'-c' 안의 $ PATH에 접근 할 수 있지만 $ PATH 아래의 실행 파일은 접근 할 수 없습니다. 나는 또한 보안 문제라고 생각한다. 내가했던 것처럼'-c' 명령 안에 $ PATH를 삽입하는 것이 좋습니다. – turhanco
'sudo' 쉘의'PATH'가 바이너리 경로를 가지고 있다면, sudo 스폰 된 쉘이 실행될 것으로 기대하고 있습니다. 정확히 어떤 오류가 있습니까? –