2016-07-14 3 views
3

sudo을 사용하는 다른 사용자로 screen을 실행하려고합니다.sudo : command not found

echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls' 

인터넷에서 발견 어떤 도움이 sudo이 환경 변수를 지 웁니다 것을 (같은 PATH)를 말한다 :

나는 명령을 사용하고 있습니다. 그래서 응용 프로그램에 대한 전체 경로를 사용하기로 결정했지만 여전히 명령을 찾을 수 없습니다. 오류.

오류 : 도우가 시스템에 설치되어

sudo: /usr/bin/screen -ls: command not found 

. 화면이 시스템에 설치되었습니다.

sudo의 경우 -E-H 플래그를 시도했지만 도움이되지 않습니다. $PATH 내가 다른 오류를 얻고 있었다 명령이 실행되기 전에 확장 할 생각되었지만 기발한

... | /usr/bin/sudo -u 'myuser' -S 'env PATH=$PATH; /usr/bin/screen -ls' 

...

누군가가를 제공 할 수

나는 이런 식으로 뭔가를 사용하여 PATH 변수를 설정하려 명령을 사용하면 다른 사용자로 명령을 실행할 수 있으며 명령의 각 부분이 무엇을 설명하는지 이해할 수 있습니까?

감사합니다.

+0

이 질문은 아마도 StackExchange 사이트 [** Super User **] (http://superuser.com/) 또는 [** ServerFault **] (http://serverfault.com/) –

+0

에 더 적합 할 것입니다. 정확한 (복사하여 붙여 넣은) 오류 메시지를 표시하려면 질문을 업데이트하십시오. BTW,'sudo'는'$ PATH'를 완전히 초기화하지 않습니다;/usr/local/bin :/usr/sbin :/usr/bin :/sbin :/bin' –

+1

나는이 질문을 off- 프로그래밍 질문이 아니기 때문에 주제가 중요합니다. [unix.se]를 시도해보십시오. –

답변

0

따옴표 안에 명령을 캡슐화 할 필요가없는 것 같습니다. 작동하지 않아도됩니다. 새 경로 변수를 설정하는 동안

echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S screen -ls

+0

명령을 따옴표로 제거하면 효과적입니다. 하지만 왜? 전달 된 명령이 인수이며 PHP에서 이스케이프 쉘 함수를 사용하여 이스케이프 처리했습니다. –

+0

@BradleyOdell -'escapeshellarg()'는 따옴표 사이의 모든 공백을 이스케이프합니다. – alvits

+0

@alvits 나는 그렇게 생각하지 않는다. 단지 주위에 작은 따옴표를 추가합니다. –

3

봅니다,

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH 

아마 당신은 경로 변수를 대체했다.

앞으로 새로운 경로 변수를 추가하기 전에 'echo $ PATH'를 수행하십시오.

관련 문제