无法转义命令

  • 本文关键字:命令 转义 bash
  • 更新时间 :
  • 英文 :


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

最新更新