为了账号安全,请及时绑定邮箱和手机立即绑定

ansible的unarchive模块如何查找tar二进制文件?

ansible的unarchive模块如何查找tar二进制文件?

慕尼黑8549860 2021-04-10 13:14:15
我正在尝试执行一个使用该unarchive模块的任务的ansible剧本。因为我是在OSX上执行此操作,所以我需要使用它gnu-tar,而不是bsd tarOSX通常附带的功能,因为BSD tar不受官方支持。我已gnu-tar使用安装了brew该gnubin文件,并将此程序包的文件夹放在$PATH变量中其他路径的前面。但是,我的剧本仍在文件夹(原始位置)中查找,而不是在新安装tar的/usr/bin文件夹中查找。targnu-tar我的问题是,unarchive模块如何查找tar二进制文件?对我来说,重写此行为以便利用的最佳方法是什么gnu-tar?
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我找到了解决方案。

在继续之前,这是我的代码,用于确保Brew-installedgnu-tar优先于bsd-tarOSX附带的代码:

# 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任务并在另一个任务中打印该任务来确认这一点。


查看完整回答
反对 回复 2021-04-16
?
千万里不及你

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”应该可以解决问题


查看完整回答
反对 回复 2021-04-16
  • 2 回答
  • 0 关注
  • 307 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信