如何使用 become 和相同的$PATH运行 Ansible 任务



我想运行此任务,但它失败了,因为它找不到bundle二进制文件,因为我运行它的用户在 Ansible 中的$PATH与我刚刚sudo su - deploy时不同。

如果我以 root 身份 SSH 进入该框,然后运行 sudo su - deployecho 'whoami' $PATH我得到deploy /home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games.

但是,如果我的命令与 ansible 任务的shell:部分相同,我会得到deploy /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.

rbenv部分是在/etc/profile.d/rbenv.sh中设置的,但是如果我使用 Ansible 运行它,它不知何故没有加载。

发现了一个古怪的技巧,可以在我所有的shell:参数前面加上source /etc/profile.d/rbenv.sh但感觉很脏:)

我该如何解决这个问题?

PS:我在我的Fedora 23上使用Ansible 2.0.2.0,它与Ubuntu 14.04服务器对话。

http://bencane.com/2013/09/16/understanding-a-little-more-about-etcprofile-and-etcbashrc/

区别很简单,/etc/profile 只执行 交互式 shell,并且/etc/bashrc 为两者执行 交互式和非交互式外壳。事实上,在 Ubuntu 中 /etc/profile 直接调用/etc/bashrc。

因此,请在 .bashrc 中包括您的/etc/profile.d/rbenv.sh 或

发现了一个古怪的黑客来前缀我所有的外壳:带有源代码的参数 /etc/profile.d/rbenv.sh

相关内容

最新更新