Tantas coisas para olhar, mas supondo que sua pergunta inicial é sobre salvar a saída de um comando como uma variável.
Para salvar a saída (STDOUT) de algum comando ou pipeline como uma variável, você precisa usar a substituição de comando ( $()
):
pass=$(head /dev/urandom | tr -dc 'A-Za-z0-9\!\"#$\@\&\%\?' | head -c "$length")
Eu fiz duas alterações:
-
você não precisa ser
root
para ler o arquivo/dev/urandom
, então eu perdisudo
-
cite sempre expansões variáveis (a menos que você saiba o que está fazendo); Eu citei
$length
Além disso, read
pode mostrar uma string de prompt (veja -p
option), você não precisa usar echo
:
read -p 'How many characters?' length