시스템 장치의 PATH 설정

시스템 장치의 PATH 설정

CentOS 7에서 비로그인 쉘의 PATH를 설정하는 방법은 무엇입니까?

특히 /usr/local/texlive/2016/bin/x86_64-linux.

/etc/environment로 설정하려고 시도했지만 PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH내 PATH는 입니다 /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

/etc/profile.d/texlive.sh그것을 사용하여 만들었지 만 export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"로그인 쉘에서만 작동합니다.

내가 찾고 있어요모든 사용자에 대한 경로 설정(로그인 및 비로그인 셸)그러나 해결책은 위에서 시도되었습니다.

내가 찾고 있어요데비안의 모든 사용자에 대한 비로그인 쉘 및 로그인 쉘에 대한 시스템 $PATH 경로를 추가하는 방법하지만 받아들여지는 해결책이 없으며 /etc/login.defs업데이트 시 변경될 수 있으므로 수정해야 할지 잘 모르겠습니다.

답변1

가장 간단한 대답은 이를 PATHsystemd 단위 파일에서 명령의 일부로 설정하는 것입니다. ExecStart예를 들어, 현재

ExecStart=/bin/mycmd arg1 arg2

그런 다음 다음으로 변경하십시오.

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

확장은 $PATHsystemd가 아닌 bash에 의해 수행됩니다. systemd가 확장되지 않기 때문에 사용 등과 같은 대안은 Environment=PATH=/new/path:$PATH작동하지 않습니다 $PATH.

답변2

Environment=, EnvironmentFile=또는 를 사용하지 않는 한 을 PassEnvironment=사용해야 합니다 ExecSearchPath=.

man systemd.exec에 대해 말하다ExecSearchPath=:

검색할 Exec*=(예: ExecStart=, ExecStop= 등) 속성에 사용되는 실행 파일과 관련된 절대 경로의 콜론으로 구분된 목록입니다. 사용자가 Environment=, EnvironmentFile= 또는 PassEnvironment=를 통해 $PATH를 제공하지 않으면 ExecSearchPath=가 $PATH를 덮어씁니다. 빈 문자열을 할당하면 이전 할당이 삭제되고 ExecSearchPath=를 값으로 여러 번 설정하면 이전 설정에 추가됩니다.

답변3

env 프로그램을 성공적으로 사용했습니다(systemd에서는 구성 파일을 통해 이를 변경할 수 없습니다).

ExecStart=/usr/bin/env PATH=/usr/bin:/path1:/path2 mycmd arg1 arg2

env는 프로그램을 실행하기 위해 새 셸을 시작하지 않습니다. 이는 사용자가 원하는 것일 수도 있고 아닐 수도 있습니다.

관련 정보