#!/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
, но это не то, что я хочу скопировать в буфер обмена
Столько вещей посмотреть на, но принятие Вашего начального вопроса о сохранении вывода команды как переменная.
Для сохранения вывода (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