当前位置: 首页 > 知识库问答 >
问题:

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

汪欣德
2023-03-14

我正在尝试执行一个可操作的剧本,其中包含一个使用非存档模块的任务。因为我是在OSX上这样做的,所以我需要它使用gnu-tar,而不是通常随OSX附带的bsd tar,因为BSD焦油不是官方支持的。

我已经使用brew安装了gnu tar,并将此包的gnubin文件夹置于$PATH变量中的其他路径之前。然而,我的playbook仍然在/usr/bin文件夹(原始tar)中查找焦油,而不是新安装gnu焦油

我的问题是,< code>unarchive模块如何查找< code>tar二进制文件,我最好用什么方法来覆盖这种行为,使它利用< code>gnu-tar?

共有2个答案

宗政洋
2023-03-14

从源代码来看,它看起来像tar正在寻找一个gtar二进制文件,如果不是tar

< code > # prefere gtar(GNU tar),因为它支持压缩选项-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”应该可以解决问题

弓泰
2023-03-14

我找到了解决办法。

在我们继续之前,这是我的代码,用于确保酿造安装的 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"

代码最初位于我的<code>中。bash_profile文件。

ansible查找< code>tar二进制文件的方式与您预期的一样:与任何其他进程一样,是< code>$PATH变量。但是,运行一个play会创建一个交互式的非登录shell。正如这里所解释的,< code>~/。bashrc文件为交互式非登录shells加载,而< code>~/。bash_profile为登录shells加载。

因为我的代码位于<code>中。bash_profile文件,它从不在我运行游戏时执行。同样,这是因为运行play会创建一个交互式非登录shell,它不会加载~/.bash_profile。因此,代码实际上应该在~/.bashrc中。

没错,当我将代码移动到 ~/.bashrc 的那一刻,我的任务开始使用已安装的 gnu-tar。我能够通过创建一个任务来确认这一点,将哪个 tar 注册到变量中,并将其打印到另一个调试任务中。

 类似资料:
  • 介绍两类Modules: Core Module和Extra module Extra module的配置和使用方法 通过命令行查看modules的用法

  • 我写了一个剧本,下载tar文件 " msg ":"找不到\"/Users/harmeet/的处理程序。ansi ble/tmp/ansi ble-tmp-1549339698.75-251687957122076/config . tar 9 ixauq . gz \ "。确保安装了提取文件所需的命令。命令\"/usr/bin/tar\ "被检测为tar类型bsd。需要GNU tar。命令\"/u

  • 什么是Ansible Module? bash无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;module就是Ansible的“命令”,module是ansible命令行和脚本中都需要调用的。常用的Ansible module有yum、copy、template等。 在bash,调用命令时可以跟不同的参数,每个命令的参数都是该命令自定义的;同样,ansible

  • 问题内容: 我有一个字节列表作为整数,这类似于 如何将此列表作为二进制文件写入文件? 这行得通吗? 问题答案: 这正是用于: 如果您使用的是Python 3.x,则可以改用(也许应该这样做,因为它可以更好地表明您的意图)。但是在Python 2.x中,这是行不通的,因为它只是的别名。像往常一样,使用交互式解释器进行显示比使用文本进行解释要容易,所以让我这样做。 Python 3.x: Python

  • 问题内容: 我从事Web编程已经有几年了,自那时以来,我还没有为桌面应用程序做任何编程,而且我已经忘记了很多事情。如果这太简单,请耐心等待。 现在我有这种情况: 我正在尝试将一些散列字存储在文件中。我想我应该为此使用二进制文件(如果我错了,请纠正我)。但是我不知道如何将单词写到文件中。我尝试了很多方法,但是当我读回文件并尝试解密单词时,我得到了。 有谁知道如何将单词写到文件中? PS:我使用以下代

  • 问题内容: 使用带有角的ResponseEntity下载任何文件不起作用 我需要在客户端使用angular下载文件,该文件可以具有pdf或excel或image或txt的任何格式…我的方法仅适用于txt文件,但给我excel和image的失败格式,对于pdf,它会给出一个空的pdf。 所以在我的控制器中,这里是调用service方法的函数: 而我的service.js具有: 我的服务方法是这样的: