Псевдонимы не раскрываются в неинтерактивной оболочке .
Псевдонимы действительно предназначены только для удобства интерактивных сеансов. Если вы хотите упростить выполнение неинтерактивных соединений, таких как Ansible, длинной командой, просто поместите ее в сценарий оболочки. Например, сделайте /root/connect-to-db.sh
со следующим содержимым:
#!/bin/sh
mysql -hxxxx -P3306 -uroot --default-character-set=utf8 db2 "$@"
Сделайте его исполняемым (chmod 755 connect-to-db.sh
), а затем выполните команду ansible
следующим образом:
ansible 10.10.130.30 -m command -a "/root/connect-to-db.sh -e 'show databases'"
Если вам действительно нужно расширение псевдонима для работы, вы можете выполнить sh то, что вы хотите, с помощью следующего playbook:
---
- hosts: 10.10.130.30
gather_facts: false
tasks:
- shell: |
shopt -s expand_aliases
. /root/.c
d
register: output
- debug:
msg: "{{ output.stdout_lines }}"
Это не будет работать с ad-ho c ansible
команда, потому что псевдонимы не доступны в той же строке или в той же функции, где они определены . Нам нужен многострочный сценарий оболочки, чтобы команда shopt
вступила в силу до получения /root/.c
.