我需要将命令输出与字符串进行比较。这是场景:
pvs_var=$(pvs | grep "sdb1")
所以 pvs var 是:/dev/sdb1 vg_name lvm2 a-- 100.00g 0
if [[ $($pvs_var | awk '{ print $2 }') = vg_name ]]; then
do something
fi
问题是 if 语句的输出是
-bash: /dev/sdb1: Permission denied
我不明白这种行为。谢谢
您正在尝试将 的内容
$pvs_var
作为命令执行,而不是将字符串传递给 awk。要解决此问题,请在 if 语句中添加
echo
or :printf
获取 JSON 格式的输出,然后您将能够以更可靠的方式提取信息:
或者使用带有 JSON 库而不是 shell 的适当编程语言(
ksh93
尽管在其即将发布的版本中支持 JSON)。(您需要 LVM 2.02.158 (2016) 或更新版本
--reportformat json
)。如果只是您想做的一个查询,
pvs
也可以为您完成所有工作:(您需要 LVM 2.02.107 (2014) 或更新版本
-S
)。还要记住引用你的变量并避免
echo
.如果您想比较输出中的 VG,那么预处理可能会更容易:
你在做什么
正在启动一个命令替换
$( ... )
,其第一个命令是$pvs_var
. Bash 尽职尽责地替换了变量的值,然后尝试执行它。那不是你想要的。另一种选择是将变量作为 here-string 发送到 awk 命令:
在这里,命令替换是调用 awk 并将它的输入传递到标准输入 -
$pvs_var
变量的内容。您只能尝试使用 awk :