【问题标题】:Run Remote Mysql Command with Shell Script使用 Shell 脚本运行远程 Mysql 命令
【发布时间】:2017-12-14 16:54:08
【问题描述】:

我正在尝试在我的 shell 脚本中运行 ssh 命令,该命令将自动在远程服务器上创建数据库、用户、密码等:

password=`date +%s|sha256sum|base64|head -c 32`
read -p "Enter staging folder name... e.g. xxxxxxxx:   " stagingdirectory
echo $stagingdirectory
read -p "Give the name for the database (this will be used in mysql)" dbname
echo $dbname
read -p "Give the name of the user for the database (this will be used in mysql)" dbuser
echo $dbuser

sqlstatement="mysql -uXXXXXXX -pXXXXXXXX -hXXXXXXXX -e "
sqlstatement+='"CREATE DATABASE IF NOT EXISTS $dbname;CREATE USER $dbuser@'%' IDENTIFIED BY '$password';GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@'%';FLUSH PRIVILEGES;"'

echo $sqlstatement
ssh -A $domainname@35.163.55.55 -e "$sqlstatement"

当我尝试运行此命令时,我收到此错误:

这是返回的内容(我已将实际值替换为 XXXX):

错误的转义字符 'mysql -udbadmin -pXXXXX -hXXXXX -e"如果不存在 $dbname 则创建数据库;创建用户 $dbuser@% IDENTIFIED BY XXXXXX;GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@%;FLUSH特权;"'。

我认为这是由于我的 sql 语句和字符串转义。

【问题讨论】:

  • 贴出$(echo $sqlstatement)的值,问题出在那儿。
  • 已添加。

标签: mysql shell


【解决方案1】:

换行试试,

ssh -A $domainname@35.163.55.57 -e "$sqlstatement"

ssh -A $domainname@35.163.55.57 "$sqlstatement"

来自ssh的手册,见下文

-e escape_char

为带有 pty 的会话设置转义字符(默认值:'~')。转义字符仅在 一行的开头。逃生 字符后跟一个点 ('.') 关闭连接;后跟 control-Z 挂起连接;并跟随其自身 发送转义字符 演员一次。将字符设置为“none”会禁用任何转义并使会话完全透明。

在你的例子中,ssh 没有得到一个有效的转义字符,你也不需要一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2017-01-12
    • 2013-04-20
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多