我正在编写一个mysqldump bash备份脚本,但无法让它正确转义密码。
如果具有,则在顶部:
PLESKPASS=( `cat /etc/psa/.psa.shadow` )
使用"set -x",我可以看到这返回:
+ echo '$AES-128-CBC$ssdvgdfvgRipfbUZcg==$Mi3asdNOTREALddnerpTTzVhYBgKriyBA='
$AES-128-CBC$ssdvgdfvgRipfbUZcg==$Mi3asdNOTREALddnerpTTzVhYBgKriyBA=
这很好。
我的命令具有以下内容:
COMMAND='mysqldump -R -a --single-transaction -uadmin -p'$PLESKPASS' '$DB' > mysqldumps/'$DB'.sql'
正确返回$DB字符串,但 Plesk 密码不是,它运行如下:
COMMAND='mysqldump -R -a --single-transaction -uadmin -p$AES-128-CBC$ssdvgdfvgRipfbUZcg==$Mi3asdNOTREALddnerpTTzVhYBgKriyBA= phpmyadmin_5IAf0u4U5vXa > mysqldumps/phpmyadmin_5IAf0u4U5vXa.sql'
这看起来不错,但是如果没有用引号括起来的密码,它就不起作用。
我尝试了许多不同的组合来使其工作。在前后使用"\",在这里和那里双引号,"'","\"等无济于事,它慢慢地让我发疯,因为我确信它很简单,但你不知道的东西总是看起来很复杂!
更新:我又玩了一下代码,通过反复试验并尝试了这些代码中的每一个:
PLESKPASS="$(</etc/psa/.psa.shadow)"
PLESKPASS=$(eval echo -e `</etc/psa/.psa.shadow`)
PLESKPASS=( `cat /etc/psa/.psa.shadow`
所有这些都正确返回了密码,我注意到有人使用了 $(),并在我命令之前一时兴起尝试了一下,所以它从:
COMMAND='mysqldump -R -a --single-transaction -uadmin -p'$PLESKPASS' '$DB'> mysqldumps/'$DB'.sql'
自
COMMAND=$(mysqldump -R -a --single-transaction -uadmin -p$PLESKPASS $DB> mysqldumps/$DB.sql)
它给出了想要的结果!我仍然没有更聪明,非常感谢大家的帮助。
试试
pleskpass="$(cat /etc/psa/.psa.shadow)"
command="mysqldump -R -a --single-transaction -uadmin -p'$PLESKPASS' '$DB' > mysqldumps/'$DB'.sql"
使用 "
应将'
保留在字符串中。
整个变量两边用双引号,密码用单引号括起来:
PLESKPASS=123
DB=testdb
COMMAND="mysqldump -R -a --single-transaction -uadmin -p'$PLESKPASS' '$DB' > mysqldumps/$DB.sql"
echo $COMMAND
打印输出
mysqldump -R -a --single-transaction -uadmin -p'123' 'testdb' > mysqldumps/testdb.sql
您的第一个命令是创建一个数组。
试试这个:
PLESKPASS=$(</etc/psa/.psa.shadow)
mysqldump -R -a --single-transaction -uadmin -p"'$PLESKPASS'" "$DB" > mysqldumps/"$DB".sql