command 和 shell 模块都用于在远程主机上执行命令,但它们之间有一些关键区别。了解这些区别有助于确定在特定场景中使用哪个模块。
    command 模块:

    • 当你需要执行一个简单的命令或程序时,可以使用 command 模块。
    • command 模块不会通过 shell 执行命令,因此 shell 变量、管道、重定向等特性都不可用。
    • 通常,command 模块在性能方面略优于 shell 模块,因为它不会启动额外的 shell 进程。

    应用场景示例:

    1. ansible -i inventory.ini all -m command -a "ls /tmp"

    在这个例子中,我们使用 command 模块在所有主机的 /tmp 目录中执行 ls 命令。
    shell 模块:

    • 当你需要执行涉及 shell 特性(如变量、管道、重定向等)的复杂命令时,可以使用 shell 模块。
    • shell 模块通过 shell(如 /bin/sh 或 /bin/bash)执行命令,因此可以使用 shell 的特性。

    应用场景示例:

    1. ansible -i inventory.ini all -m shell -a "ls /tmp | grep log"

    在这个例子中,我们使用 shell 模块在所有主机的 /tmp 目录中执行 ls 命令,并通过管道将输出传递给 grep 以查找包含 “log” 的文件。
    总之,在大多数情况下,建议首先尝试使用 command 模块,因为它比 shell 模块略微高效。只有在需要使用 shell 特性时,才应考虑使用 shell 模块。