#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
. Это может решить вашу проблему немедленно, и в противном случае это не повредит вашему сценарию. Удачи!