2 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
我找到了解決方案。
在繼續(xù)之前,這是我的代碼,用于確保Brew-installedgnu-tar
優(yōu)先于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
二進(jìn)制文件的方式與您期望的一樣:該$PATH
變量與其他任何過(guò)程一樣。但是,運(yùn)行劇本會(huì)創(chuàng)建一個(gè)交互式非登錄外殼程序。正如解釋在這里,該~/.bashrc
文件被加載交互式非登錄shell,而~/.bash_profile
被載入了登錄shell。
由于我的代碼位于~/.bash_profile
文件中,因此無(wú)論我何時(shí)運(yùn)行播放,它都永遠(yuǎn)不會(huì)執(zhí)行。同樣,這是因?yàn)檫\(yùn)行播放會(huì)創(chuàng)建一個(gè)交互式非登錄外殼,該外殼不會(huì)加載~/.bash_profile
。因此,代碼實(shí)際上應(yīng)該在中~/.bashrc
。
的確如此,當(dāng)我將代碼移至的那一刻~/.bashrc
是我的任務(wù)開始使用installed的時(shí)間gnu-tar
。我可以通過(guò)創(chuàng)建一個(gè)要注冊(cè)which tar
到變量中的debug
任務(wù)并在另一個(gè)任務(wù)中打印該任務(wù)來(lái)確認(rèn)這一點(diǎn)。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
從源代碼看來(lái),tar正在尋找gtar二進(jìn)制文件,如果不是,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”應(yīng)該可以解決問(wèn)題
添加回答
舉報(bào)