SSH к серверу и создать каталог на основе переменной - все в одной строке - PullRequest
0 голосов
/ 29 июня 2018

поэтому у меня есть простой скрипт, который перечисляет структуру папок и файлов текущего каталога и выплевывает его в файл в домашнем каталоге текущего пользователя, а затем rsyncs этот файл на удаленный сервер в определенную папку.

первая часть скрипта SSH на удаленном сервере и создает уникальную папку, в которую более поздняя часть скрипта передает файл.

#ssh -p 12345 sftp.domain.com ' bash -c "mkdir incoming/[foldername]" '

мой вопрос, как я могу передать переменную этому? я обычно помещаю это в скрипт, а затем запускаю скрипт как «copy.sh $ 1»:

#ssh -p 12345 sftp.domain.com ' bash -c "mkdir incoming/folder-$1" '

однако это не работает, как я мог бы надеяться, что будет. все, что я получаю в итоге - это папка на удаленном сервере с именем «folder-», поскольку она, по-видимому, не передает переменную вместе с остальными, когда она входит в ssh.

есть ли лучший способ сделать эту работу?

остальная часть сценария также будет ссылаться на переменную $ 1, чтобы фактически скопировать файл в папку, созданную на удаленном сервере ранее в сценарии.

1 Ответ

0 голосов
/ 29 июня 2018

Если я правильно понимаю проблему, параметр, на который вы пытаетесь ссылаться, устанавливается на стороне локального клиента (в командной строке, откуда вы инициируете соединение ssh), но вы хотите ссылаться на него в командной строке, которая должна запустить на стороне удаленного сервера. Это на самом деле не имеет ничего общего с ssh и не связано с расширением параметров / переменных оболочки на стороне локального клиента.

Проблема в том, что вы используете одинарные и двойные кавычки. Большинство командных оболочек Unix, включая bash, который, вероятно, является оболочкой, которую вы используете на стороне локального клиента, выполняют расширение переменных среды внутри двойных кавычек, но не внутри одинарных кавычек. Таким образом, в вашей командной строке вы сможете достичь своей цели, изменив одинарные кавычки на двойные кавычки, а затем избегая встроенных двойных кавычек, например:

#ssh -p 12345 sftp.domain.com " bash -c \"mkdir incoming/folder-$1\" "

Вот аналогичный пример, который показывает это в действии:

$ export EXAMPLE=abc
$ ssh localhost ' bash -c "echo $EXAMPLE def" '
def
$ ssh localhost " bash -c \"echo $EXAMPLE def\" "
abc def
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...