Você definiu uma função random-string()
para gerar senhas aleatórias contendo A-Za-z0-9
e exibindo apenas a mais alta ( head -1
), da sua pergunta não está claro se você deseja salvar as senhas geradas após uma execução cada vez para um arquivo ou você quer fazer isso de forma recursiva.
Deixe-me simplificar seu comando primeiro:
tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1
-
tr
recebe a classe de caractere[:alnum]
, que indica caracteresA-Za-z0-9
-
Não há necessidade de
cat
, passar o nome do arquivo via STDIN paratr
-
A expansão de parâmetro
fold -w ${1:-8}
não é necessária, basta usarfold -w 8
Agora, para salvar a saída após uma execução da função (somente uma senha), isso substituirá o arquivo toda vez, use o operador de redirecionamento >
do shell:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1 ;} >foobar
$ random_string
$ cat foobar
MqJdehaO
Estamos salvando o STDOUT da função random_string
no arquivo foobar
no diretório atual.
Na próxima execução, o arquivo será substituído pelo novo conteúdo:
$ random_string
$ cat foobar
NP85OmWw
Para substituir o arquivo, por exemplo spamegg
use >>
redirecionamento, o que significa que o STDOUT da função será anexado ao arquivo sempre que for executado:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n 1 ;} >>spamegg
$ random_string
$ cat spamegg
vjwOe6TB
$ random_string
$ cat spamegg
vjwOe6TB
TBkv6qPh
Para torná-lo mais flexível, podemos definir quantas senhas queremos salvar em uma corrida, fornecendo o número via número como o primeiro argumento para a função:
$ random_string () { tr -dc '[:alnum:]' </dev/urandom | fold -w 8 | head -n "" ;} >foobar
$ random_string 5
$ cat foobar
AV79dZeC
byitWYfX
eDBAldiI
6OxNU78H
gRs7SwEO
Como você pode ver, 5 senhas foram geradas e salvas no arquivo foobar
, alterando 5
com qualquer número de senhas que você queira.