Сохранение скрытого пароля в переменной bash для записи в файл позже - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время у меня есть сценарий, который пытается сгенерировать новый пароль VN C.

Когда я ввожу строку 0987poiu)(*&POIU в свой сценарий, он генерирует почти идентичный вывод в утилиту vncpasswd. Это сравнение выполняется путем сравнения двух сгенерированных файлов ~/.vnc/passwd.

ISSUE / SSCCE

Существует разница между

my_input='0987poiu)(*&POIU'
test_var=$(echo $my_input | vncpasswd -f)
echo $test_var > /home/test_file_1

и

my_input='0987poiu)(*&POIU'
echo $my_input | vncpasswd -f > /home/test_file_2

Я пробовал использовать echo $my_input | tr -d '\n' для удаления любых символов новой строки, но безрезультатно. Я также использовал printf вместо echo, что тоже не сработало.

Сохранение обфусцированного пароля в переменной и использование echo или printf для передачи этой переменной в файл не работает.

Я могу получить echo $my_input | vncpasswd -f > /home/test_file2 в соответствии с выводом ~/.vnc/passwd, который был сгенерирован утилитой vncpasswd, но это не желаемый порядок операций, и я хотел бы сохранить вывод vncpasswd -f в переменную для дальнейшего использования в скрипте.

$ hexdump test_file_1
00000000 1921 65e6 2aaa 1c20 000a
00000009

$ hexdump test_file_2
00000000 1921 65e6 2aaa 1c09
00000008

1 Ответ

1 голос
/ 14 июля 2020

Обе команды echo добавляют новую строку к значению, которое вы действительно хотите использовать. Вместо этого используйте printf. Расширения параметров без кавычек могут учитывать удаление конечных пробелов из значения параметра.

my_input='0987poiu)(*&POIU'
test_var=$(printf '%s' "$my_input" | vncpasswd -f)
printf '%s' "$test_var" > /home/test_file_1
...