Назад | Перейти на главную страницу

Запустите локальный скрипт на удаленном сервере с помощью ssh, не беспокоясь о кавычках

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

ssh user@server "`cat local-script.sh`"

Однако сегодня у меня есть сценарий, в котором есть как одинарные, так и двойные кавычки. Это приводит к сбою сценария, потому что вывод cat local-script.sh заключен в кавычки. Есть ли лучший способ справиться с этим без изменения самого сценария?

Я думал, что это может сработать:

ssh user@server $(<local-script.sh)

Но вроде ничего не делает ...

cat local-script.sh | ssh user@server bash

или любую другую оболочку, которую вы хотите использовать вместо bash

С помощью следующего тестового сценария:

#!/bin/bash
uname -n
a=(b c 'd e' f)
echo "${#a[@]}"
b=(1 "2 3" 4)
echo "${#b[@]}"

На выходе должно быть имя удаленного хоста, за которым следуют 4 и 3 при выполнении с использованием:

ssh user@server "$(<scriptname)"

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

Кстати, первая опубликованная вами команда не работает. Одиночные кавычки предотвращают локальную оценку обратных кавычек.

Предположим, что сценарий находится в файле script.sh. Что за проблема с бегом:

 ssh -T user@remote.host.com <script.sh

У меня это работает!