Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ansible';s unarchive模块查找tar二进制文件?_Linux_Macos_Module_Ansible_Tar - Fatal编程技术网

Linux ansible';s unarchive模块查找tar二进制文件?

Linux ansible';s unarchive模块查找tar二进制文件?,linux,macos,module,ansible,tar,Linux,Macos,Module,Ansible,Tar,我正在尝试执行一个ansible playbook,该playbook有一个利用unarchive模块的任务。因为我在OSX上这样做,我需要它使用gnu tar,而不是OSX通常附带的bsd tar,因为 我已经使用brew安装了gnu tar,并将此软件包的gnubin文件夹放在$PATH变量中其他路径的前面。但是,我的playbook仍然在/usr/bin文件夹(原始tar的位置)中查找tar,而不是新安装的gnu tar 我的问题是,unarchive模块如何查找tar二进制文件,以及我重

我正在尝试执行一个ansible playbook,该playbook有一个利用
unarchive
模块的任务。因为我在OSX上这样做,我需要它使用
gnu tar
,而不是OSX通常附带的
bsd tar
,因为

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


我的问题是,
unarchive
模块如何查找
tar
二进制文件,以及我重写此行为的最佳方式是什么,以便它使用
gnu tar

从源代码看,tar似乎在寻找
gtar
二进制文件,如果不是
tar


#更喜欢gtar(gnutar),因为它支持压缩选项-zjJ
self.cmd_path=self.module.get_bin_path('gtar',无)
如果不是self.cmd_路径:
#退而求其次
self.cmd\u path=self.module.get\u bin\u path('tar')

因此,将brew安装的gnu tar别名为“gtar”或“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\u配置文件中

ansible查找
tar
二进制文件的方式与您所期望的一样:
$PATH
变量,与任何其他进程一样。但是,运行剧本会创建一个交互式的非登录shell。如前所述,为交互式非登录shell加载
~/.bashrc
文件,为登录shell加载
~/.bash\u配置文件

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

没错,我将代码移动到
~/.bashrc
的那一刻,就是我的任务开始使用安装的
gnu tar
的时候。我可以通过创建一个任务来确认这一点,该任务将
哪个tar
注册到一个变量中,并在另一个
调试任务中打印它