无法使用ansible源代码~/.bashrc文件

无法使用ansible源代码~/.bashrc文件,bash,ansible,Bash,Ansible,我在一个文件中有一个别名列表,.bash\u aliases,它正通过ansible playbook复制到远程服务器。正在将文件复制到目标,但使用以下ansible任务未加载.bashrc(依次加载.bash\u别名)文件 我试着给出可执行的论点 毫无争议 带原始模块 带命令模块 -名称:源.bashrc文件 命令:source~/.bashrc 什么都不管用!!!任何帮助通过阅读您的评论,您声明您正在尝试创建永久别名,而不是针对特定会话。为什么不在需要使用这些特定别名的机器上,而不是由用户在

我在一个文件中有一个别名列表,
.bash\u aliases
,它正通过
ansible playbook
复制到远程服务器。正在将文件复制到目标,但使用以下ansible任务未加载
.bashrc
(依次加载
.bash\u别名
)文件

我试着给出可执行的论点

毫无争议

带原始模块

带命令模块 -名称:源.bashrc文件 命令:source~/.bashrc


什么都不管用!!!任何帮助

通过阅读您的评论,您声明您正在尝试创建永久别名,而不是针对特定会话。为什么不在需要使用这些特定别名的机器上,而不是由用户在/etc/profile.d中创建这些别名呢

另外,当我在谷歌上搜索Ansible细节时,另一篇帖子突然出现,因为我不是Ansible专家。。。(感谢@chucksmash提供的链接)

“史蒂夫·米德格利

您有两个选项可以将source与ansible一起使用。一个是“shell:”命令和/bin/sh(ansible默认值)。在/bin/sh中调用“source”。。因此,您的命令应该是:

-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

最后,我要指出的是,如果您使用的是Ubuntu或类似的软件,那么您可能需要实际地获取“/etc/profile”,这会更完全地模拟本地登录。”

如果您希望在一个Bash实例中设置的变量在其他Bash实例中可见,或者在运行此Bash脚本的Ansible实例中可见,则无法做到这一点;这是Unix进程模型的固有特性

您可以做的是设置一个变量,然后运行任何需要设置该值的工具

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

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

您如何“知道”它没有被加载?发布一些重现问题的内容。@KarolyHorvath,因为我在
.bash\u别名文件中列出的别名不起作用。但是在登录到远程服务器后手动
source.bashrc
文件时,别名可以正常工作。这并不意味着它没有被执行。@KarolyHorvath为什么在使用上面列出的模块运行playbook后别名不工作?我假设您想在以后的任务中使用一些别名。如果是这种情况,那么您就不走运了,因为ansible将每个任务放在一个单独的python脚本中,然后将其复制到主机,然后执行它。您在上一个任务中设置的任何别名都不会出现在后续任务中。如果您查看链接的其他站点的URL,您会发现它们只是在复制StackOverflow内容(“…q/StackOverflow/22256884/”。答案是可用的
-name: source bashrc
sudo: no
shell: . /home/username/.bashrc && [the actual command you want run]
name: source bashrc
sudo: no   
shell: source /home/username/.bashrc && [the actual command you want run]
args:
  executable: /bin/bash
bash -c 'var="value" /path/to/other/tool'