使用 tree

要将 Ansible 的输出同时写入文件和显示在屏幕上,您可以使用 Unix/Linux 的 tee 命令。tee 命令允许您将输出发送到屏幕和文件。
在运行 Ansible 命令时,将其输出通过管道传递给 tee 命令,并指定要保存输出的文件名。例如,如果要将输出保存到名为 ansible_output.log 的文件中,请使用以下命令:

  1. ansible-playbook -i inventory.ini your_playbook.yml | tee ansible_output.log

这将同时将输出显示在屏幕上并将其写入 ansible_output.log 文件。如果您希望以追加模式将输出添加到现有文件,请使用 tee -a 选项:

  1. ansible-playbook -i inventory.ini your_playbook.yml | tee -a ansible_output.log

这将把输出追加到现有的 ansible_output.log 文件中,而不是覆盖它。

失去颜色

当你使用 tee 命令时,Ansible 的输出会失去颜色。这是因为 Ansible 默认检测到它不是直接输出到终端,所以它不会产生彩色输出。
要保留颜色,你可以强制 Ansible 生成彩色输出,然后使用 unbuffer 命令来保持颜色。首先,确保你已经安装了 expect 软件包,因为 unbuffer 是其中的一个工具:

  1. sudo apt-get install expect # For Debian/Ubuntu
  2. sudo yum install expect # For CentOS/RHEL
  3. sudo dnf install expect # For Fedora

然后,使用以下命令强制生成彩色输出并将其传递给 unbuffer 和 tee:

  1. unbuffer ansible-playbook -i inventory.ini --force-color your_playbook.yml | tee ansible_output.log

这将保持终端中的颜色输出,同时将彩色输出写入 ansible_output.log 文件。然而,请注意,在某些文本编辑器或查看器中,彩色输出可能不会正确显示,因为它包含了控制字符。你可以使用支持 ANSI 颜色代码的查看器(如 less -R 命令)来查看彩色日志文件:

  1. less -R ansible_output.log