У меня следующая проблема. У меня есть сценарий bash, который использует wget для получения нескольких файлов с сервера сборки, а затем передает их по scp в производственную систему: Вот соответствующий фрагмент:
#Several of these lines
wget -nv -O birt_reports.zip "http://buildserver:8111/guestAuth/repository/download/bt6/.lastFinished/birt_reports.zip"
#files in the for loop left out for simplicity
for upload_file in "birt_reports.zip"; do
scp -B -i /root/$keyfile $upload_file $user@gateway:/home/$user/deploy_staging
touch $upload_file
done
Даже при наличии касания время, указанное в ls -l каталога, - это время первого создания файла. Если я выполняю wget вне сценария bash или касаюсь вне сценария bash, время обновляется правильно.
В чем может быть проблема?
возможно /bin/touch -m $upload_file
лучше подходит, так как он изменяет время модификации на текущее время.
Используя приведенную ниже команду, можно установить метку времени файла на текущее время и дату в вашей системе:
touch -t `date +%y%m%d%H%M.%S` /path/to/filename
Вы можете попробовать это вместо простой команды касания.
Также, когда вы запускаете свой сценарий bash, запускайте:
bash -xv your_bash_script.bash
также попробуйте использовать полный путь к вашим командам, чтобы проверить полный путь к команде:
whereis touch
Поскольку вы можете использовать это без среды оболочки, рекомендуется использовать полный путь, чтобы убедиться, что он запускает каждую команду без проблем.
Правильно ли загружен файл в формате scp? (Я не могу комментировать ваш вопрос)
Если нет, то я думаю, что вам что-то не хватает в пути к загруженному файлу в цикле for для обеих команд. Прикс указывает способ проверки реальных команд.