我正在编写一个mysqldump bash备份脚本,但无法正确转义密码。
在顶部,如果有:
PLESKPASS=( `cat /etc/psa/.psa.shadow` )
使用'设置-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 =&#39; mysqldump -R -a --single-transaction -uadmin -p&#39; $ PLESKPASS&#39; &#39; $ DB&#39; &GT; mysqldumps /&#39; $ DB&#39; .SQL&#39;
到
COMMAND = $(mysqldump -R -a --single-transaction -uadmin -p $ PLESKPASS $ DB&gt; mysqldumps / $ DB.sql)
它给出了理想的结果!我仍然不是更聪明,非常感谢每个人的帮助。
答案 0 :(得分:1)
尝试
pleskpass="$(cat /etc/psa/.psa.shadow)"
command="mysqldump -R -a --single-transaction -uadmin -p'$PLESKPASS' '$DB' > mysqldumps/'$DB'.sql"
使用"
应该将'
保留在字符串中。
答案 1 :(得分:1)
围绕整个变量的双引号,密码周围的单引号工作:
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
答案 2 :(得分:0)
你的第一个命令是创建一个数组。
试试这个:
PLESKPASS=$(</etc/psa/.psa.shadow)
mysqldump -R -a --single-transaction -uadmin -p"'$PLESKPASS'" "$DB" > mysqldumps/"$DB".sql