Estou tentando copiar os valores de uma variável para a área de transferência do meu gerador de senhas, mas isso não funciona

1
#!/bin/bash

echo "How many characters? 
read length

pass=sudo head /dev/urandom | tr -dc 'A-Za-z0-9\!\"#$\@\&\%\?' | head -c$length
sleep 1
echo "$pass"

echo $pass | xclip -sel c

Funciona se eu mudar $pass com $length , mas não é isso que eu quero copiar para a área de transferência

    
por Eddie 03.05.2018 / 22:19

1 resposta

2

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 perdi sudo

  • 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
    
por heemayl 03.05.2018 / 22:28