2 回答
TA贡献1876条经验 获得超5个赞
我找到了解决方案。
在继续之前,这是我的代码,用于确保Brew-installedgnu-tar
优先于bsd-tar
OSX附带的代码:
# gnu-tarexport PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"export MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"
该代码最初位于我的~/.bash_profile
文件中。
Ansible查找tar
二进制文件的方式与您期望的一样:该$PATH
变量与其他任何过程一样。但是,运行剧本会创建一个交互式非登录外壳程序。正如解释在这里,该~/.bashrc
文件被加载交互式非登录shell,而~/.bash_profile
被载入了登录shell。
由于我的代码位于~/.bash_profile
文件中,因此无论我何时运行播放,它都永远不会执行。同样,这是因为运行播放会创建一个交互式非登录外壳,该外壳不会加载~/.bash_profile
。因此,代码实际上应该在中~/.bashrc
。
的确如此,当我将代码移至的那一刻~/.bashrc
是我的任务开始使用installed的时间gnu-tar
。我可以通过创建一个要注册which tar
到变量中的debug
任务并在另一个任务中打印该任务来确认这一点。
TA贡献1784条经验 获得超9个赞
从源代码看来,tar正在寻找gtar二进制文件,如果不是,tar
# Prefer gtar (GNU tar) as it supports the compression options -zjJ
self.cmd_path = self.module.get_bin_path('gtar', None)
if not self.cmd_path:
# Fallback to tar
self.cmd_path = self.module.get_bin_path('tar')
因此,将您的brew安装的gnu tar别名为“ gtar”或“ tar”应该可以解决问题
- 2 回答
- 0 关注
- 307 浏览
添加回答
举报