/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"
うまくいくでしょう。
ここで確認する必要があるもう1つは、追加したい新しいパスです/home/another-user/bin
。ユーザーのホームディレクトリは通常700権限で保護されているため、コンテンツは所有者(つまりそのホームディレクトリに対応するユーザー)にのみ表示されます。/etc/environment
すべてのユーザーに適用されますが、新しいパス構成はすべてのユーザーに適用されますか?調査を検討してみてください。
答え2
Centos7では、許可された回答が機能しないことがわかりました。通常、RHEL7とCentos7はこのレベルで同じ機能を持っています。
/etc/environment
空で説明されているとおりに正しく動作します。Ubuntuドキュメント(はい、もう一度確認しましたが、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仮想マシンがないため、このソリューションも機能しているかどうかをテストできません。