Eu quero criar números únicos aleatórios (UUIDs) como o seguinte
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
Primeiro eu tentei isso
$ rndnum=` echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM"-"echo $RANDOM`
$ echo $rndnum
30380-echo 21875-echo 14791-echo 32193-echo 11503
Qual é a maneira correta de criar o seguinte (onde f
está qualquer número)?
ffffffff-ffff-ffff-ffff-ffffffffffff
No Linux, o pacote
util-linux
/ oferece um comando para gerar UUIDs: .util-linux-ng
uuidgen
Para citar o manual :
Adendo: O OP havia fornecido um link nos comentários para a documentação do Presto DB . Depois de pesquisar um pouco, encontrei esta discussão relacionada onde é explicitamente mencionado que a
node.id
propriedade é de fato um UUID.Adicionando as informações fornecidas por frostschutz em um comentário:
Como alternativa à abordagem
uuidgen
/libuuid
, você pode fazer uso de uma interface exposta pelo próprio kernel do Linux para gerar UUIDs:O UUID é gerado novamente em cada solicitação.
Como o @frostschutz mencionou, você pode usar uma solução sem dependência:
ou salve a variável
No Bash você pode simplificar para:
Em um PI de framboesa e provavelmente em outros, o comando é simplesmente:
uuid
Ele deve ser pré-instalado, mas se não, isso deve ser feito:
sudo apt install uuid
Abaixo está o script bash para gerar o UUID versão 4 de acordo com a RFC 4122 .
UUID versão 4 significa que é baseado em números verdadeiramente aleatórios ou pseudo-aleatórios.
$(($RANDOM & 0x0fff | 0x4000)) - substitui os quatro bits aleatórios da esquerda por 0100 conforme definido pelas partes 4.4 e 4.1.3 do RFC.
$(($RANDOM & 0x3fff | 0x8000)) - substitui os dois bits aleatórios esquerdos por 10 conforme definido pela parte 4.4 do RFC.