Rhel

在 RHEL7 上使用 Ansible 將項目永久添加到 $PATH

  • January 13, 2022

/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 ~]$

我確實在這里和 Stack Overflow 上找到了使用正則表達式的其他範例,但是這些範例會導致相同的問題,command not found/etc/environment以一種或另一種方式進行修改。

/etc/environment文件不作為 shell 腳本進行評估。引用其手冊頁(為清楚起見重新排列):

配置文件包含“KEY=VALUE”環境變數分配列表,由換行符分隔。

這些賦值的右側可以引用先前定義的環境變數,使用“ $ {OTHER_KEY}" and " $ OTHER_KEY”格式。

不支持 shell 語法的其他元素。

因此,您export在插入的行中有一個命令,該命令對該/etc/environment文件無效。更改自:

line: "export PATH={{ extra_path }}:$PATH"

line: "PATH={{ extra_path }}:$PATH"

它應該可以正常工作。


此處要檢查的其他內容是您要添加的新路徑,它似乎是/home/another-user/bin. 使用者的主目錄通常受到 700 權限的保護,因此內容僅對所有者可見(即與該主目錄對應的使用者)。/etc/environment適用於所有使用者,但新路徑配置是否與所有使用者相關?可以考慮研究的東西。

引用自:https://unix.stackexchange.com/questions/612460