2015-08-31 21 views
3

我在試驗我是否可以使用ansible-playbook local.yml在本地主機上檢查bundle的版本,如下面的local.yml所示。.zshrc沒有加載Ansible?

  • local.yml

    --- 
    
    - hosts: local 
        remote_user: someuser 
        tasks: 
         - name: Check bundle version 
         shell: "{{ansible_user_shell}} -l -c 'bundle --version'" 
         args: 
          chdir: "/path/to/rails/dir" 
    

庫存文件如下:

  • 主機

    [local] 
        127.0.0.1 
    [local:vars] 
        ansible_ssh_user=someuser 
    

不過,我得到了錯誤的說法,

標準錯誤:zsh中:1:找不到命令:bundle`

我不知道,因爲我確定是安裝包爲什麼我收到此錯誤在本地主機上。另外我發現shell模塊不使用登錄shell,因此.zshrc中的環境變量未加載,因此我運行了帶有-l(使用登錄shell)選項的zsh。但它不起作用。有什麼我失蹤?

+0

這可能與Ansible如何執行sudo有關 - 它可能不會設置「$ HOME」,使得.zshrc來自錯誤的用戶。或者按照這個方法猜猜看。 –

+1

@MikkoOhtamaa謝謝你的回答。我其實是自己想出來的。 – hitochan

回答

3

我自己想出了這個問題。問題是zsh的配置。我以爲每個登錄都會執行.zshrc。這是不準確的,因爲.zshrc僅在登錄和交互式外殼上加載。在上述情況下,命令是NOT在交互式shell上運行,因此.zshrc未加載。 要我每次使用登錄shell時加載.zshrc,我創建了上登錄shell加載.zprofile如下:

# include .zshrc if it exists 
if [ -f "$HOME/.zshrc" ]; then 
    . "$HOME/.zshrc" 
fi 

另一種解決方案可能是添加-i(交互式shell)選項:)

+0

爲了獲得相同的獲勝結果,在這裏使用rbenv命令的相同類型的問題,將zshrc轉換爲zshrc和zprofile – giglemad