Итак, я отлично запускал локальные скрипты на удаленном сервере:
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
У меня это работает!