Как мне scp с сервера с переменной в качестве пути к файлу? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь написать сценарий bash, который (1) находит на сервере самый новый файл, соответствующий строковому шаблону, и (2) копирует этот файл с сервера на мой локальный компьютер.Я закончил первую часть, но у меня проблемы со второй.

Я перепробовал все комбинации использования кавычек, фигурных скобок, экранирования двоеточия, жесткого кодирования корневой папки на сервере, но ничего из этого не работает.

file_name=$(ssh -t id@server.com "ls -t /path/to/file/on/server/file_name_* | head -1; bash -l") echo $file_name #this works scp id@server.com:$file_name path/to/local #this does not work

Строка 2 работает, поэтому я предполагаю, что строка 1 работает.Я могу без проблем запустить строку 3, когда набираю команду в терминале с жестко заданным кодом file_name.Когда я запускаю этот скрипт, я получаю сообщение об ошибке: No such file or directoryhalf/of/the/path/to/the/file.csv В основном это сообщение об ошибке, без пробела, затем половина пути от эха в строке 2. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 января 2019

Не понимаю, почему вы использовали "ssh -t" и "bash -l". Они не нужны. Они вызывают проблемы в моей тестовой среде.

Тем не менее, подобные проблемы, скорее всего, вызваны невидимыми персонажами. Чтобы проверить, так ли это, вы можете echo "[$file_name]", чтобы увидеть, что в нем.

В данном конкретном случае, пожалуйста, посмотрите, что я нашел:

   $ file_name=$(ssh -t testbox "ls -t /home/ec2-user/hello* | head -1")
   Connection to xxx closed. 

   $ echo "[$file_name]"
   ]/home/ec2-user/hello  # <--- the expected output is [/home/ec2-user/hello]

   $ scp testbox:$file_name ./
   : No such file or directory

Для сравнения, ssh без -t дает нам ожидаемый результат:

$ file_name=$(ssh testbox  "ls -t /home/ec2-user/hello* | head -1")

$ echo "[$file_name]"
[/home/ec2-user/hello]

$ scp testbox:$file_name ./
hello                                    100%    0     0.0KB/s   00:00
...