我想在通过 Vagrant 运行的来宾计算机上添加一些别名。我的配置程序是 Ansible,如果我可以在剧本上添加带有任务的别名,那就太好了,我希望不必修改我的
Vagrantfile
。
我在一个角色中尝试过这两种方法:
command: alias serve='pub serve --hostname=0.0.0.0'
shell: "alias serve='pub serve --hostname=0.0.0.0'"
shell 选项看起来正确,但它只会为会话创建别名。然后,当您在配置后连接到它时,它将不存在。我也不确定剧本中的其他游戏是否能够使用它,因为他们可能会使用另一个 SSH 会话。
要永久添加它,您需要将其添加到相关的
.bashrc
或 .bash_aliases
(然后由 .bashrc
获取),具体取决于您的 Linux 风格/版本。
为此,您可以简单地使用:
shell: echo "alias serve='pub serve --hostname=0.0.0.0'" >> ~/.bash_aliases
但这不是幂等的,并且重新运行 Ansible playbook 或 Vagrant 配置(将重新运行 Ansible playbook)每次都会添加重复行。
相反,您应该使用 lineinfile 模块,例如:
- name: Add serve alias for foo user
lineinfile:
path=/home/foo/.bashrc
line="alias serve='pub serve --hostname=0.0.0.0'"
owner=foo
regexp='^alias serve='pub serve --hostname=0.0.0.0'$'
state=present
insertafter=EOF
create=True
上面的操作会将别名行添加到 foo 用户的
.bashrc
文件的末尾(如果由于某种原因不存在则创建该文件)。当您重新运行它时,它会尝试匹配正则表达式值(这可能需要使用转义部分进行调整),如果匹配,那么它将用行值替换它。
感谢这个答案,在添加别名行后:
- name: Add serve alias for foo user
lineinfile:
path=/home/foo/.bashrc
line="alias serve='pub serve --hostname=0.0.0.0'"
regexp='^alias serve='pub serve --hostname=0.0.0.0'$'
state=present
insertafter=EOF
create=True
您还需要
source
文件:
- name: Source .bashrc
shell: "source /home/foo/.bashrc"
args:
executable: /bin/bash