Разверните выбранные переменные в этом документе при вызове Bash через SSH

У меня нет удаленного доступа к серверу MySQL, поэтому я пытаюсь сделать это через сеанс SSH.

Частично работает, но не корректно.

sshpass -p $password ssh user@$IP /bin/bash << EOF
mysql -N -uroot -ppassword test -e "select id from client where user ='$user'"
EOF

Это покажет результат оператора select, но я хотел бы иметь возможность использовать этот результат в другом операторе эха.

eg:

The user ID is: xxxxx

Я попытался назначить вывод переменной, используя:

sshpass -p $password ssh user@$IP /bin/bash << EOF
res=$(mysql -N -uroot -ppassword test -e "select id from client where user ='$user'")
echo $res
EOF

Но это приводит к:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysql/mysql.sock' (2)

Если я цитирую EOF как 'EOF', то я могу получить результат в res, но я теряю возможность использовать $user

Есть ли способ сделать это, чтобы я мог использовать свою переменную в heredoc и получить результат запроса MySQL к новой переменной?


person Tom    schedule 11.06.2020    source источник


Ответы (1)


Если я цитирую EOF как 'EOF', то я могу получить результат в res, но я потеряю возможность использовать $user

Вы можете передать $user в bash в качестве позиционного параметра и по-прежнему иметь указанный EOF и его преимущества. Например:

sshpass -p "$password" ssh "user@$IP" /bin/bash -s "$user" << 'EOF'
res=$(mysql -N -uroot -ppassword test -e "select id from client where user ='$1'")
echo $res
EOF

Руководство Bash описывает параметр -s следующим образом.

Если присутствует параметр -s или если после обработки параметра не осталось аргументов, команды считываются со стандартного ввода. Этот параметр позволяет задавать позиционные параметры при вызове интерактивной оболочки или при чтении ввода через конвейер.

person oguz ismail    schedule 11.06.2020