sh скрипт с переменными scp

#cygwin #sh #scp

#cygwin #sh #scp

Вопрос:

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

Чего я не могу понять, так это почему мой код будет работать в оболочке, но не будет работать, когда я запускаю его как скрипт. Я также запускаю свой скрипт на cygwin, не уверен, что это что-то изменит.

Вот сценарий

 #!/bin/sh
x=$(ssh user@hostname 'ls -r -t /vgf/day1*.gif | tail -1')
echo $x
scp user@hostname:"${x}" /images/day1.gif
  

x назначен правильно, но когда я добираюсь до команды scp, я получаю что-то вроде

 : No such file or directoryif
  

Однако, если я запущу команду scp в командной строке, она будет работать

 $ sh download.sh
/vgf/day1.gif
: No such file or directoryif
$ scp user@hostname:"${x}" /images/day1.gif
day1.gif                                              100%   22KB  22.1KB/s   00:00
  

Я был бы открыт для различных решений. Если бы я мог предотвратить увеличение версии с помощью какого-либо администрирования Linux, я мог бы следовать этому маршруту, хотя мне все еще интересно, в чем здесь проблема.

Я имею в виду версию day1_001.gif и новая версия становится day1_002.gif и так далее. Поэтому, когда файл сохраняет файл day1.gif он перезапишет оригинал без создания другой версии.

Комментарии:

1. Запустите свой скрипт с опцией -x, вы можете set -x получить трассировку проблемной области в коде. Это сообщение об ошибке является стандартным, у вас, вероятно, не определена переменная, поскольку это переменная оболочки (не относящаяся к окружающей среде) или проблемы с цитированием или сложные имена файлов. Но я боюсь, что доступ к файлам с помощью оболочек из-за неудобных имен трудно получить правильно. Это одна из причин, по которой системные администраторы перешли на perl или python. Для затенения деревьев файлов вам следует проверить rsync, он может использовать оболочку ssh для удаленного доступа и имеет множество функций для отображения измененных файлов, которые могут составлять удобные списки для ваших сценариев

2. Ах, cygwin. Я не могу вспомнить, использует ли cygwin rn окончания или нет. Легко проверить dos2unix myScpScript . Это может решить вашу проблему немедленно, и в противном случае это не повредит вашему сценарию. Удачи!