。Anssh中没有加载.zshrc?

时间:2015-08-31 08:10:43

标签: ansible ansible-playbook

我正在尝试是否可以使用bundle检查localhost中ansible-playbook local.yml的版本,如下面的local.yml所示。

  • 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
    

但是我收到错误说,

  

stderr:zsh:1:找不到命令:bundle`

我不知道为什么我收到此错误,因为我确认在localhost上安装了bundle。另外我发现shell模块不使用登录shell,因此没有加载.zshrc中的环境变量,因此我使用-l(使用登录shell)选项运行zsh。但它不起作用。有什么我想念的吗?

1 个答案:

答案 0 :(得分:4)

我自己想出了问题。问题是zsh的配置。我以为.zshrc是在每次登录时执行的。这是不准确的,因为.zshrc仅在登录和交互式 shell上加载。在上面的例子中,命令是 NOT 在交互式shell上运行,因此没有加载.zshrc。 要在每次使用登录shell时加载.zshrc,我创建了.zprofile,它在登录shell上加载,如下所示:

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

另一个解决方案可能是添加-i(交互式shell)选项:)