无法逃脱命令

时间:2014-04-03 07:47:10

标签: bash

我正在编写一个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)

它给出了理想的结果!我仍然不是更聪明,非常感谢每个人的帮助。

3 个答案:

答案 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