我正在尝试执行一个有使用unarchive
模块的任务的ansible playbook。因为我在OSX上执行此操作,所以我需要使用gnu-tar
,而不是以来通常随OSX提供的bsd tar
。
我使用gnu-tar
安装了brew
,并将此包的gnubin
文件夹放在$PATH
变量中的其他路径之前。但是,我的Playbook仍会在tar
文件夹(原始/usr/bin
的位置)中找到tar
,而不是新安装的gnu-tar
。
我的问题是,unarchive
模块如何查找tar
二进制文件,以及最好的方法是覆盖此行为,以便它使用gnu-tar
代替?
答案 0 :(得分:1)
我找到了解决方案。
在我们继续之前,这是我的代码,用于确保brew安装的gnu-tar
优先于OSX附带的bsd-tar
:
# gnu-tar
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"
此代码最初位于我的~/.bash_profile
文件中。
ansible查找tar
二进制文件的方式与您期望的一样:$PATH
变量,与任何其他进程一样。但是,运行游戏会创建交互式非登录shell 。正如here所述,{em>交互式非登录shell 加载~/.bashrc
文件,而登录shell 加载~/.bash_profile
。
由于我的代码位于~/.bash_profile
文件中,因此每当我运行游戏时它都不会执行。同样,这是因为运行游戏会创建一个交互式非登录shell ,不会加载~/.bash_profile
。因此,代码实际应该在~/.bashrc
。
是的,当我将代码移到~/.bashrc
时,当我的任务开始使用已安装的gnu-tar
时。我能够通过创建一个任务来将which tar
注册到变量并将其打印到另一个debug
任务中来确认这一点。
答案 1 :(得分:0)
从源代码看,tar看起来像dhcp-18--41:VO$ python
Python 2.7.15 (default, May 1 2018, 16:44:14)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
二进制文件,如果不是gtar
tar
因此,将brew安装的gnu tar别名为“gtar”或“tar”应解决问题