【发布时间】:2019-04-07 20:50:31
【问题描述】:
我想从 kpartx 工具中提取输出:
add map loop18p1 (253:0): 0 1048576 linear 7:18 2048
add map loop18p2 (253:1): 0 1046528 linear 7:18 1050624
然后将loop18p1和loop18p2保存到$a和$b。
kpartx="$(sudo kpartx -av $IMAGE_FILE)"
read PART_FAT32 PART_NTFS <<<$(grep -o 'loop.p.' <<<"$kpartx")
a=/dev/mapper/$PART_FAT32
b=/dev/mapper/$PART_NTFS
echo $a
echo $b
但不知何故,它似乎不起作用,我总是得到空变量:
/dev/mapper/
/dev/mapper/
亲切的问候,
詹姆士
【问题讨论】:
-
kpartx="$(sduo kpartx -av $IMAGE_FILE)"我猜有错字,应该是sudo -
哦,谢谢,我已经解决了,但我的问题仍然存在:(
-
您希望该代码如何工作?一方面,
loop.p.期望在loop中的p和分隔设备号和分区号的p之间只有 一个 字符,但在您的示例中,您有 两个字符。 -
...除此之外,
read a b只读取 one 行,将第一个单词放入a,并将所有后续单词放入b。如果您想阅读 两 行,它应该是{ read firstLine; read secondLine; } < <(...whatever...)(注意使用 process substitution,它可以让您将来自grep的输出流式传输到您的reads,而不是您当前的您需要grep完全完成的代码,然后将其输出写入临时文件,然后从该临时文件中读取read)。 -
顺便说一句,注意全大写名称用于对 shell 或操作系统有意义的变量;小写名称是为应用程序使用而保留的,因此您应该将其用于在脚本中分配的变量名称。
标签: bash automation