![시스템 장치의 PATH 설정](https://linux55.com/image/106433/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%9E%A5%EC%B9%98%EC%9D%98%20PATH%20%EC%84%A4%EC%A0%95.png)
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
가장 간단한 대답은 이를 PATH
systemd 단위 파일에서 명령의 일부로 설정하는 것입니다. ExecStart
예를 들어, 현재
ExecStart=/bin/mycmd arg1 arg2
그런 다음 다음으로 변경하십시오.
ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'
확장은 $PATH
systemd가 아닌 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는 프로그램을 실행하기 위해 새 셸을 시작하지 않습니다. 이는 사용자가 원하는 것일 수도 있고 아닐 수도 있습니다.