openssl rand -base64 10 gera mais de 10 símbolos. Ele gera 10 bytes (que podem corresponder a caracteres não imprimíveis) e os codifica (usando um conjunto de caracteres imprimíveis).
Para gerar símbolos aleatórios de um determinado conjunto, use tr . Exemplo:
LC_ALL=C </dev/urandom tr -cd '[:lower:][:digit:]+\-._' | head -c 10 ; printf '\n'
Aqui tr recebe bytes de /dev/urandom e passa apenas os correspondentes; head termina o canal quando o número de caracteres especificado é atingido; printf adiciona uma nova linha.
Verifique man 1 tr e crie seu próprio conjunto desejado.
Notas:
-
LC_ALL=C faz com que tr ignore sua localidade.
- escapei de
- (daí \- ) porque tr interpreta +-. como um intervalo; , está dentro desse intervalo. Eu quis dizer +-._ literalmente, não incluindo , .