【问题标题】:Assign Linux File System Type to Variable将 Linux 文件系统类型分配给变量
【发布时间】:2020-02-28 05:51:17
【问题描述】:

我正在尝试将 Linux 文件系统类型分配给一个变量。 我的命令df -Th | grep "^/dev" 的输出 如下:

/dev/mapper/rhel-root xfs        50G   11G   40G  22% /
/dev/mapper/rhel-home xfs        53G  569M   53G   2% /home
/dev/sdb1             xfs      1014M  192M  823M  19% /boot
/dev/sdc1             vfat      7.6G  7.4G  125M  99% /run/media/root/RHEL-8-1-0-

我的解决方案是将其传递给 awk 语句以返回 rhel-root 的类型,但是我没有得到任何输出。

var=$(awk '{
  if($1 == "/dev/mapper/rhel-root"){
    print $2;
    }
  }' | df -Th | grep "^/dev")

如何将文件类型 (xfs) 分配给变量?

【问题讨论】:

  • 使用var=$(df ... | grep ... | awk ...),我建议在df 命令中添加选项-P。
  • @Cyrus 的意思是,在将输出提供给awk 之前,您需要使用dfgrep 生成数据,因此awk 需要在管道中排在最后,不是第一个。奇怪的是你没有得到输出——你应该得到所有显示为变量中df … | grep … 输出的文本。 df 不读取标准输入。我想 bash 可能会挂断等待awk 终止——它正在尝试读取标准输入。你必须中断代码吗?我做到了!

标签: linux bash file filesystems


【解决方案1】:

您需要将管道df .. grep .. 的输出提供给awk 命令作为输入:

var=$(awk '{
  if($1 == "/dev/mapper/rhel-root"){
    print $2;
    }
  }' <(df -Th | grep "^/dev") )
echo "$var"

然后会输出:xfs

一个通用的解决方案是:

declare -A array                # assiciative array
while read -r fs type others; do
    if [[ $fs = /dev/* ]]; then
        array[$fs]="$type"      # associate fs with its type
    fi
done < <(df -Th)

echo "${array[/dev/mapper/rhel-root]}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多