![RHEL7에서 Ansible을 사용하여 $PATH에 프로젝트를 영구적으로 추가](https://linux55.com/image/181037/RHEL7%EC%97%90%EC%84%9C%20Ansible%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%24PATH%EC%97%90%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC%20%EC%98%81%EA%B5%AC%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%B6%94%EA%B0%80.png)
/home/another-user/bin
Ansible이 RHEL 7 VM의 $PATH 변수에 성공적으로 추가하려면 다음 특정 구문 중 무엇을 변경해야 합니까?
플레이북의 현재 버전:
우리가 사용한 플레이북은 다음과 같이 변수를 설정한 /home/another-user/bin
다음 해당 변수를 사용하여 줄을 추가합니다 /etc/environment
.
vars:
extra_path: /home/another-user/bin
vars_files:
- myVars.yaml
#Other stuff
- name: Update /etc/environment for newly loaded apps
lineinfile:
dest: /etc/environment
line: "export PATH={{ extra_path }}:$PATH"
owner: root
become: true
become_user: root
vars:
ansible_become_password: "{{ root_pass_word }}"
나쁜 결과
문제는 위의 예가 $PATH의 기존 항목을 모두 삭제하므로 및 cat
기타와 같은 기본 명령이 더 이상 인식되지 않는다는 것입니다.
[my-user@ip-10-0-0-171 ~]$ echo $PATH
/home/another-user/bin:$PATH:/usr/local/sbin:/usr/sbin:/home/my-user/.local/bin:/home/my-user/bin
[my-user@ip-10-0-0-171 ~]$ cat /etc/environment
-bash: cat: command not found
[my-user@ip-10-0-0-171 ~]$
정규식을 사용하여 여기와 스택 오버플로에서 다른 예제를 찾았지만 command not found
어떤 방식으로든 수정하면 동일한 문제가 발생합니다./etc/environment
답변1
이 /etc/environment
파일은 쉘 스크립트로 평가되지 않습니다. 인용해 보세요매뉴얼 페이지(명확성을 위해 재배열됨):
구성 파일에는 줄 바꿈으로 구분된 "KEY=VALUE" 환경 변수 할당 목록이 포함되어 있습니다.
이러한 할당의 오른쪽은 "${OTHER_KEY}" 및 "$OTHER_KEY" 형식을 사용하여 이전에 정의된 환경 변수를 참조할 수 있습니다.
...
쉘 구문의 다른 요소는 지원되지 않습니다.
따라서 삽입된 줄 export
에는 파일에 유효하지 않은 명령이 포함 되어 있습니다 /etc/environment
. 다음에서 변경됨:
line: "export PATH={{ extra_path }}:$PATH"
도착하다
line: "PATH={{ extra_path }}:$PATH"
잘 작동할 겁니다.
여기서 확인해야 할 또 다른 사항은 추가하려는 새 경로입니다 /home/another-user/bin
. 사용자의 홈 디렉터리는 일반적으로 700 권한으로 보호되므로 콘텐츠는 소유자(즉, 해당 홈 디렉터리에 해당하는 사용자)에게만 표시됩니다. /etc/environment
모든 사용자에게 적용되지만 새 경로 구성이 모든 사용자에게 적용됩니까? 조사를 고려해 볼 사항입니다.
답변2
Centos7에서는 허용된 답변이 작동하지 않는 것으로 나타났습니다. 일반적으로 RHEL7과 Centos7은 이 수준에서 동일한 기능을 가지고 있습니다.
/etc/environment
비어 있고 설명된 대로 정확하게 동작합니다.우분투 문서(예, 다시 확인했는데 VM은 확실히 Centos7입니다.) 변수를 확장하지 않아 해당 리터럴이 $PATH
마음에 들지 않아 경로가 중단되었습니다 .$
문서에서 권장 솔루션을 찾았으며 스크립트를 추가하면 /etc/profile.d/
예상대로 작동합니다.
echo 'export PATH=$PATH:/some/other/path' > /etc/profile.d/my_path.sh
또는 사용앤서블 복제 모듈
- name: Add to PATH
copy:
content: "export PATH=$PATH:/some/other/path"
dest: "/etc/profile.d/my_path.sh"
RHEL7 가상 머신이 없기 때문에 이 솔루션도 작동하는지 테스트할 수 없습니다.