You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中使用AWK命令提取硬盘使用率?

解决Ansible Shell模块结合AWK提取硬盘使用率的问题

我来帮你排查这个问题——终端里能正常跑的命令到Ansible里失效,大多是执行环境差异或者引号转义的坑,咱们一步步来解决:

1. 先搞定YAML的引号转义问题

在Ansible的YAML文件里,直接写带管道、引号的命令很容易被YAML解析干扰。比如你原来的写法里,cut -d"(" -f2的双引号可能会被YAML吃掉,导致命令执行异常。

推荐两种写法规避这个问题:

  • 用单引号包裹整个命令,同时把awk里的单引号转义:
- name: 提取硬盘使用率
  shell: 'inxi -D | awk ''/Total Size:/ {print $7}'' | cut -d"(" -f2'
  register: disk_usage
  • 用 heredoc 风格(竖线开头),让命令格式更清晰,也不用纠结转义:
- name: 提取硬盘使用率
  shell: |
    inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
  register: disk_usage

2. 简化命令,减少管道环节

其实可以把cut的逻辑直接整合到awk里,少一层管道就少一层出错的可能。用awk的split函数直接分割字符串,一步拿到结果:

- name: 简化版提取硬盘使用率
  shell: inxi -D | awk '/Total Size:/ {split($7, arr, "("); print arr[2]}'
  register: disk_usage

这个命令里,awk会把$7对应的(2.0%按(分割,直接取第二个元素2.0%,比原命令更简洁可靠。

3. 确认inxi的执行路径

有时候Ansible的执行环境(比如用sudo切换用户、或者PATH变量和终端不同)找不到inxi,可以先确认路径再调用:

- name: 检查inxi的绝对路径
  shell: which inxi
  register: inxi_path

- name: 用绝对路径提取硬盘使用率
  shell: '{{ inxi_path.stdout }} -D | awk ''/Total Size:/ {split($7, arr, "("); print arr[2]}'''
  register: disk_usage

4. 调试排查,看清楚哪里出问题

如果还是不行,就开启调试模式,看看命令的执行输出和错误信息:

- name: 提取硬盘使用率(带调试)
  shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
  register: disk_usage
  failed_when: disk_usage.rc != 0

- name: 打印调试信息
  debug:
    var: disk_usage

查看disk_usage.stdout(命令输出)和disk_usage.stderr(错误信息),就能快速定位是inxi没找到,还是输出格式和终端不一致。

最后可以加个任务验证结果:

- name: 打印硬盘使用率
  debug:
    msg: "当前硬盘使用率: {{ disk_usage.stdout }}"

内容的提问来源于stack exchange,提问作者Dominik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:11:39