Правильный синтаксис bash при использовании python, который вызывает bcrypt для хеширования пароля, который является переменной

Правильный синтаксис bash при использовании python, который вызывает bcrypt для хеширования пароля, который является переменной

Убунту 16.04

shellcheck сообщает: "Выражения не раскрываются в одинарных кавычках, используйте для этого двойные кавычки", но мой пароль — это var. Скрипт отлично работает, когда я использую одинарные кавычки для импорта bcrypt.

Вот мой сценарий:

#!/bin/bash

wDir="/home/work/amp/"
ampDir="${wDir}.pass_and_hash/"
ampPass="0192734654837948787098"
ampAdminPass="0192734654837948787098"
ampPassHashtxt="${ampDir}.ampPassHash.txt"
ampAdminPassHashtxt="${ampDir}.ampAdminPassHash.txt"

#-- create the .pass_and_hash folder
mkdir -p "$ampDir"

#-- echo both $ampPass and $ampAdminPass to files at .pass_and_hash
echo "${ampPass}" > "${ampDir}".ampPass.txt
echo "${ampAdminPass}" > "${ampDir}".ampAdminPass.txt

#-- generate hashes for $ampPass and $ampAdminPass and record output to files at .pass_and_hash
python2 -c 'import bcrypt; print(bcrypt.hashpw("$ampPass", bcrypt.gensalt(10)))' > "$ampPassHashtxt"
python2 -c 'import bcrypt; print(bcrypt.hashpw("$ampAdminPass", bcrypt.gensalt(10)))' > "$ampAdminPassHashtxt"

#-- Echo the values of the hash to /home/work/amp/Logs/console.log
echo "";
echo "*** After Created - Generate + Record Hashes for SuperAdmin + Administrator ****"
echo "SuperUser - generated password = $ampPass and hash = $(cat $ampPassHashtxt)"
echo "Administrator User - generated password = $ampAdminPass and hash = $(cat $ampAdminPassHashtxt)"
exit 0;

При запуске скрипта я не получаю никаких ошибок:

root@pl /home/work/amp # ./run.sh

*** After Created - Generate + Record Hashes for SuperAdmin + Administrator ****
SuperUser - generated password = 0192734654837948787098 and hash = $2b$10$7UuG0NfTYZ8Ritgj3nhQt.7Fqa7RTYlN97WyoTt1EGrrXmA85pVc6
Administrator User - generated password = 0192734654837948787098 and hash = $2b$10$H3Gr4hrDL/6CAaCgSf2f7eEvqdbM9DUese1cQpyn/muBdQdmiFNgS

Когда я спрашиваю у shellcheck, что он думает, он отвечает:

root@pl /home/work/amp # shellcheck run.sh

In run.sh line 18:
python2 -c 'import bcrypt; print(bcrypt.hashpw("$ampPass", bcrypt.gensalt(10)))' > "$ampPassHashtxt"
           ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.


    In run.sh line 19:
    python2 -c 'import bcrypt; print(bcrypt.hashpw("$ampAdminPass", bcrypt.gensalt(10)))' > "$ampAdminPassHashtxt"
               ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

Как исправить двойные кавычки, чтобы удовлетворить требования shellcheck?

решение1

Я имитирую ваш скрипт, нет необходимости устанавливать переменную ampPass:

$ python2 -c 'print("$ampPass");'
$ampPass

Внутри одинарных кавычек $ampPass не будет заменен, поместите его только между двойными кавычками:

python2 -c 'import bcrypt; print(bcrypt.hashpw("'"$ampPass"'", bcrypt.gensalt(10)))' > "$ampPassHashtxt"

Связанный контент