2015-01-11 3 views
0

저는 전 Windows 사용자이고 Unix 쉘에 문제가 있습니다.

su - $USER -p -c "$CMD"this one과 같은이 명령은 주어진 환경의 경로 변수에 액세스해야하지만 그렇지 않습니다. su - $USER -p -c "export PATH=$PATH; $CMD"으로 변경하면 예상대로 작동합니다. (나는 짐작한다).

init 스크립트에서이 코드를 시도하고 있는데이 질문과 관련하여 다른 질문이 있습니다. here (죄송합니다 중복에 대한,하지만 난 여기서 물어 올바른 장소입니다 확신합니다.) su - $USER -c $CMD 잊어가 이전에 ENV 변수를 정의하는 이유

  1. 첫 번째 질문은?
  2. 나는 -을 제거 시도, 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"합니다. 이것이 최선의 관행인지 확실하지 않습니다.

+0

스와'때문에 '의도적으로 부모의 환경을 보존하지 않습니다. 맹목적으로 그렇게하는 것이 보안 문제 일 것입니다. 환경을 보존하기 위해'-m' /'-p' 플래그가 있습니다. 그러나 이와 같은 것에 대한 해결책은 아마 더 좋습니다 ('export' 비트는 필요 없습니다). –

+0

'su'동작을 설명해 주셔서 감사합니다. 답변에 대한 응답으로 내 질문을 편집했습니다. 'su'는'-c' 안의 $ PATH에 접근 할 수 있지만 $ PATH 아래의 실행 파일은 접근 할 수 없습니다. 나는 또한 보안 문제라고 생각한다. 내가했던 것처럼'-c' 명령 안에 $ PATH를 삽입하는 것이 좋습니다. – turhanco

+0

'sudo' 쉘의'PATH'가 바이너리 경로를 가지고 있다면, sudo 스폰 된 쉘이 실행될 것으로 기대하고 있습니다. 정확히 어떤 오류가 있습니까? –

답변

0

su -은 사용자를 전환하고 새 사용자의 환경을로드한다는 의미입니다 (사용자로 로그인 할 때로드되는 것과 유사). -없이 su을 대신 사용해보십시오. 이것은 사용자를 전환하지만 사용자를 교체하기 전의 환경을 유지합니다.

0

음 su - 로그인 셸을 사용하는 것이 좋습니다. 그래서 그것은 당신이 su'ing하고있는 사용자의 env를 취하고 있습니다. 유지하려는 경우 ENV는 생략 -

+0

나는 당신의 제안을 시도했지만 여전히 작동하지 않습니다. 나는 또한 나의 질문을 편집했다. 그것을 확인하시기 바랍니다. – turhanco

+0

항상 명령의 전체 경로를 사용하십시오 – Doon

0

man su을 :

$PATH의 값은/bin으로 재설정 : 일반 사용자는/usr/빈 ...