bash - Bash - 将 kpartx 输出提取到变量
问题描述
我想从 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="$(sudo kpartx -av $IMAGE_FILE)"
在我的系统上,这意味着:
$ IMAGE_FILE=2018-11-13-raspbian-stretch-lite.img
$ kpartx="$(sudo kpartx -av $IMAGE_FILE)"
$ echo "$kpartx"
loop3p1 : 0 89854 /dev/loop3 8192
loop3p2 : 0 3547136 /dev/loop3 98304
您的输出可能看起来不同,但这足以让我们测试其余代码。
接下来,您尝试$kpartx
使用嵌套<<<
表达式从变量中提取设备名称:
$ read PART_FAT32 PART_NTFS <<<$(grep -o 'loop.p.' <<<"$kpartx")
这让我:
$ echo $PART_FAT32
loop3p1
$ echo $PART_NTFS
换句话说,$PART_NTFS
是空的。那是因为read
只在单行上运行,并且您的grep
命令输出多行。结果grep -o 'loop.p.' <<<"$kpartx"
是:
$ grep -o 'loop.p.' <<<"$kpartx"
loop3p1
loop3p2
因此,您需要重构提取这些值的方式。
推荐阅读
- c# - 奇怪的 asp.net MVC System.OutOfMemoryException :(
- c# - 具有序列化派生类能力的基类
- wso2 - wso2 IS 作为 KM 不能使用 SCIM
- python - 从类似字符串的字典中删除重复的文本
- oracle - 使用 Aws SCT 工具将 Oracle 包转换为 PostgreSQL 的命名问题
- python - Keras 忽略了提供给第一层的 input_shape
- regex - 正则表达式匹配文件夹结构中的有效路径
- java - 从字符串中删除千位分隔符
- css - 字体真棒图标大小在使用 vue.js 首次加载静态页面时跳跃
- ibm-integration-bus - 以下堆栈跟踪的可能原因是什么,以便我可以进一步调查?