Как выполнить любую команду inline ssh, как будто я печатаю его вручную, но прямой вывод на локальный компьютер?

bash расширения параметра должно хватить

var='1.2.3-SNAPSHOT'
echo "${var%%-*}"
1.2.3
var='1.2.3'
echo "${var%%-*}"
1.2.3

0
11.09.2018, 21:34
1 ответ

Проблема в ваших цитатах:

$ word='phrase'
$ echo "pass$word"
passphrase
$ echo "'pass$word'"
'passphrase'
$ echo "'pass\$word'"
'pass$word'

Сильные кавычки не «защищают» переменные внутри слабых кавычек, поскольку они теряют свои магические свойства.

Одно простое решение — избежать знака доллара, который может привести к вашему падению.:

$ ssh user@remote.ip "mysqldump -u dbuser -p'pass\$word' dbname > backup.sql"

Другой вариант — поместить пароль в переменную:

$ password='pass$word' ssh user@remote.ip "mysqldump -u dbuser -p '$password' dbname > backup.sql"

В-третьих, если вы хотите перенести резервную копию на свой локальный хост, используйте SSH-туннель.:

$ ssh -L 3306:localhost:3306 sleep 60 &
$ mysqldump -u dbuser -p 'pass$word' -h localhost -P 3306 dbname > backup.sql

Кроме того, ваш вопрос говорит о перенаправлении вывода на ваш локальный компьютер, но ваши команды не делают этого:

$ ssh user@host "echo hello > output" # creates output on remote host
$ ssh user@host "echo hello" > output # creates output on local host
2
28.01.2020, 02:31

Теги

Похожие вопросы