As expressões posteriores interpretam alguns caracteres especiais (por exemplo, barras invertidas). Use $( ... )
em vez disso.
archives=( $(ls /dev/disk/by-label/ \
| sed -rn 's/.*archive\x20(.*)//Ip' \
| sort -d) )
Estou tentando escrever um script que montará automaticamente as unidades de arquivo do nosso servidor na inicialização (por motivos de segurança, nada anexado à máquina é montado automaticamente pelo sistema).
O que eu tenho até agora é isso:
#! /bin/bash
archives=( 'ls /dev/disk/by-label/ | sed -rn 's/.*archive\x20(.*)//Ip'|sort -d')
echo "Output of the Commands piped to array:"
for arcNum in ${archives[@]}; do
echo "mounting Archive: $arcNum"
done
echo "Desired Output of Command:"
ls /dev/disk/by-label/ | sed -rn 's/.*archive\x20(.*)//Ip'|sort -d
A execução gera isso no terminal:
user@machine:~$ autoLoadArchives
Output of the Commands piped to array:
Desired Output of Command:
2
4
6
user@machine:~$
Se eu remover o sinalizador -n e o comando p do sed:
ls /dev/disk/by-label/ | sed -r 's/.*archive\x20(.*)//I'|sort -d
Acabo com a lista bruta não filtrada na matriz, mas uma lista não filtrada e devidamente substituída na versão da linha de comando:
user@machine:~$ autoLoadArchives
output of the Commands piped to array:
mounting Archive: Archive\x206
mounting Archive: MY-USB
mounting Archive: PFI\x20ARCHIVE\x202
mounting Archive: PFI\x20Archive\x204
Desired Output of Command:
2
4
6
MY-USB
user@machine:~$
Saída de $ ls /dev/disks/by-label/
:
user@machine:~$ ls /dev/disk/by-label/
Archive\x206 MY-USB PFI\x20ARCHIVE\x202 PFI\x20Archive\x204
user@machine:~$
Eu tenho a horrível sensação de que o meu problema é provavelmente algo idioticamente arrogante, mas honestamente estou deixando um vazio em relação ao que está acontecendo aqui.