gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:05 24 4
gpt4 key购买 nike

我正在尝试执行一个 ansible 剧本,该剧本的任务是使用 unarchive 模块。因为我在 OSX 上执行此操作,所以我需要它使用 gnu-tar,而不是通常随 OSX 一起提供的 bsd tar,因为 BSD tar is not officially supported .

我已经使用 brew 安装了 gnu-tar,并将这个包的 gnubin 文件夹放在 $ 中其他路径的前面PATH 变量。但是,我的剧本仍然在 /usr/bin 文件夹(原始 tar 的位置)中寻找 tar,而不是新安装的gnu-tar.

我的问题是,unarchive 模块如何查找 tar 二进制文件,什么是我覆盖此行为的最佳方式,以便它利用 gnu-tar,而不是?

最佳答案

我找到了解决方案。

在我们继续之前,这是我的代码,用于确保 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 变量,就像任何其他进程一样。但是,运行一个 play 会创建一个交互式非登录 shell。正如解释的那样 here~/.bashrc 文件为交互式非登录 shell 加载,而 ~/.bash_profile登录 shell 加载.

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

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

关于linux - ansible 的 unarchive 模块如何查找 tar 二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50193397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com