Я пытаюсь скопировать значения переменной в буфер обмена из моего генератора паролей, но это не работает

#!/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

Это работает, если я заменяю $pass на $length, но это не то, что я хочу скопировать в буфер обмена

1
задан 3 May 2018 в 23:55

1 ответ

Столько вещей посмотреть на, но принятие Вашего начального вопроса о сохранении вывода команды как переменная.


Для сохранения вывода (STDOUT) некоторой команды или конвейера как переменная необходимо использовать замену команды ($()):

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

Я внес два изменения:

  • Вы не должны быть root читать /dev/urandom файл, таким образом, я отбросил sudo

  • всегда заключайте переменные расширения в кавычки (если Вы не знаете то, что Вы делаете); я заключил в кавычки $length


Кроме того, read может показать строку приглашения (см. -p опция), Вы не должны использовать echo:

read -p 'How many characters?' length
2
ответ дан 7 December 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: