不能用ansible来源〜/ .bashrc文件

时间:2015-12-07 12:41:14

标签: bash ansible

我在文件.bash_aliases中有一个别名列表,该列表正被复制到ansible playbook的远程服务器。该文件将被复制到目标,但.bashrc(依次加载.bash_aliases)文件未使用以下ansible任务加载。

  

我尝试过提供可执行参数

  - name: source the .bashrc file
    shell: source ~/.bashrc
    args:
      executables: "/bin/bash"
  

没有参数

  - name: source the .bashrc file
    shell: source ~/.bashrc
  

使用原始模块

  - name: source the .bashrc file
    raw: source ~/.bashrc

使用命令模块        - name:获取.bashrc文件         命令:source~ / .bashrc

什么都行不通!任何帮助

2 个答案:

答案 0 :(得分:5)

通过阅读您的评论,您表示您正在尝试制作永久别名,而不是针对特定会话。为什么不在/etc/profile.d中的那些别名上创建那些你需要拥有这些特定别名而不是用户的机器上的别名呢?

另外,当我在Ansible细节上运行谷歌搜索时弹出的另一篇文章,因为我不是Ansible专家... Not possible to source .bashrc with Ansible(感谢@chucksmash的链接)

" Steve Midgley

您有两个选项可以使用ansible源代码。一个是" shell:"命令和/ bin / sh(ansible默认值)。 "源"被称为"。"在/ bin / sh。所以你的命令是:

-name: source bashrc
sudo: no
shell: . /home/username/.bashrc && [the actual command you want run]

注意你必须在源代码后运行命令.bashrc b / c每个ssh会话都是不同的 - 每个ansible命令都在一个单独的ssh事务中运行。

你的第二个选择是强制Ansible shell使用bash然后你可以使用" source"命令:\

name: source bashrc
sudo: no   
shell: source /home/username/.bashrc && [the actual command you want run]
args:
  executable: /bin/bash

最后,我要注意您可能想要实际来源" / etc / profile"如果您使用的是Ubuntu或类似设备,它可以更完整地模拟本地登录。"

答案 1 :(得分:0)

如果您希望在一个Bash实例中设置的变量在其他Bash实例中或在运行此Bash脚本的Ansible实例中可见,则无法执行此操作;这是Unix进程模型所固有的。

可以做的是设置变量,然后运行需要设置此值的任何工具。

bash -c 'var="value" /path/to/other/tool'

这可能是任意复杂的,但如果您需要执行的任务可能需要的不仅仅是最简单的调试,那么创建单独的外部脚本可能会更好。