Linux 通过ansible调用远程bash函数

Linux 通过ansible调用远程bash函数,linux,bash,ansible,ansible-ad-hoc,Linux,Bash,Ansible,Ansible Ad Hoc,是否可以通过ansible ad-hoc命令(使用shell、命令模块)调用bash中定义的远程函数(例如添加到/etc/profile.d下存储的一个脚本中) 例如,我有以下功能,可以查看apt历史记录的状态: function apt-history(){ case "$1" in install) cat /var/log/dpkg.log | grep 'install ' ;; upgrade|remove)

是否可以通过ansible ad-hoc命令(使用shell、命令模块)调用bash中定义的远程函数(例如添加到/etc/profile.d下存储的一个脚本中)

例如,我有以下功能,可以查看apt历史记录的状态:

function apt-history(){
  case "$1" in
    install)
          cat /var/log/dpkg.log | grep 'install '
          ;;
    upgrade|remove)
          cat /var/log/dpkg.log | grep $1
          ;;
    rollback)
          cat /var/log/dpkg.log | grep upgrade | \
              grep "$2" -A10000000 | \
              grep "$3" -B10000000 | \
              awk '{print $4"="$5}'
          ;;
    *)
          cat /var/log/dpkg.log
          ;;
  esac
}

是否可以通过ad-hoc命令直接通过函数名从一个ansible现有模块调用此函数?我知道可以创建一个新脚本并直接远程调用它,但这不是我想要实现的。非常感谢您的建议。

您必须使用如下命令或shell模块在远程端实例化bash:

ansible localhost -m command -a 'bash -lc apt-history'

如果您需要设置环境变量,这是一个常见的技巧。

好的,很好,它成功了!为了将参数传递给远程函数,我使用了引号和稍加修改的语法,它工作得很好(顺便说一句,命令是ansible中的默认模块,所以我可以跳过它)。我修改的命令:ansible testbed-a'bash-lc“apt history install”'