udisksctl
是我处理文件系统图像时选择的工具(最近的例子,但我一直在各处这样做)。
舞蹈通常看起来像
fallocate -l ${img_size} filesystem.img
mkfs.${fs} filesystem.img
# Set up loop device as regular user
loopback=$(udisksctl loop-setup -b "${img_file}" | sed 's/.* \([^ ]*\)\.$/\1/')
# Mount as regular user
mounted=$(udisksctl mount -b "${loopback}" | sed 's/^.* \([^ ]*\)$/\1/')
# Do the testing/benchmarking/file management
# e.g.:
cp -- "${files[@]}" "${mounted}"
坦率地说,我对解析输出的方式有一种不好的感觉udisksctl
;这些显然是针对人类的字符串:
Mapped file filesystem.img as /dev/loop0. Mounted /dev/loop1 at /run/media/marcus/E954-81FB
而且我认为没有人会考虑他们实际的格式“API”。所以,我的脚本将来可能会出问题!(更不用说如果图像文件名包含换行符,我还会招来鼻音恶魔。)
udisksctl
似乎没有“瓷器”输出选项或类似选项。是否有现有方法可以udisksctl
通过 udisks2 以用户权限完成回送安装,并且输出正确、明确的输出?
我理解你的痛苦...我也喜欢 的无 sudo 功能
udisksctl
,我在几个 代码片段和项目中使用了 UDisks2 ,而且我也讨厌它的输出是多么“对机器不友好”。也就是说,我倾向于采用的一种方法是不解析的输出
udisksctl mount,loop-*,...
,仅将其用于操作,并将解析留给udisksctl info
,udevadm
甚至lsblk -lnpb
(如果您愿意使用,甚至可以有 JSON 输出jq
!)。如果您确实要解析
udisksctl
,至少应在其前面加上,LC_ALL=C
以避免使用固定的C
“虚拟”语言环境来使用本地化消息,这样至少可以保证匹配的字符串不会因用户环境而改变。例子:
不再搜索人类想要的消息!
(或者更好的是,在这个2017 年仍然开放的脚本友好界面请求中表达你的声音)