2 回答

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

TA貢獻1784條經(jīng)驗 獲得超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”應(yīng)該可以解決問題
添加回答
舉報