udisksctl
é minha ferramenta preferida ao lidar com imagens do sistema de arquivos ( exemplo recente , mas tenho feito isso em todos os lugares ).
A dança normalmente parece
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}"
Francamente, tenho um mau pressentimento sobre a maneira como analiso a saída de udisksctl
; estas são strings claramente direcionadas ao ser humano:
Mapped file filesystem.img as /dev/loop0. Mounted /dev/loop1 at /run/media/marcus/E954-81FB
E não acho que alguém considere seu formato real como "API". Então, meus scripts podem falhar no futuro! (Sem mencionar os demônios nasais que convido se o nome do arquivo de imagem contiver quebras de linha.)
udisksctl
não parece ter uma opção de saída "porcelana" ou similar. Existe um método existente que faz udisksctl
o trabalho de montagem de loopback com privilégio de usuário por meio de udisks2, com uma saída adequada e inequívoca?
Eu sinto sua dor... Eu também adoro o poder sem sudo do
udisksctl
, uso UDisks2 em vários trechos e projetos e também odeio o quão " hostil para a máquina " é sua saída.Dito isso, uma abordagem que estou adotando é não analisar a saída de
udisksctl mount,loop-*,...
, usá-la apenas para ações e deixar a análise paraudisksctl info
,udevadm
ou mesmolsblk -lnpb
(que pode até ter saída JSON se você estiver disposto a usarjq
!).Se você analisar
udisksctl
, pelo menos acrescente-oLC_ALL=C
para evitar mensagens localizadas usando o código de idioma "virtual" fixo , para garantir pelo menos queC
as strings correspondentes não serão alteradas por ambiente de usuário.Exemplos:
Chega de receber mensagens destinadas a humanos!
(ou, melhor ainda, faça sua voz ser ouvida nesta solicitação ainda aberta de 2017 para uma interface amigável a scripts )