1

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

Вот как выглядит мой фрагмент:

mv ~/myStuff.conf  ~/myStuff.conf.bak
cp ~/new/myStuff.conf ~/myStuff.conf

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

DATEVAR=date +%s
mv ~/myStuff.conf  ~/myStuff.conf.$DATEVAR.bak

Но это не работает, так как функция date не выполняется, и bash видит ее как строку, а полученный файл

myStuff.conf.date+%s.bak

Любые идеи о том, как получить результаты функции даты в переменную?

3 ответа3

5

Это возможно с подстановкой команд.

DATEVAR=$(date +%s)
1

Это не отвечает переменной, содержащей выходные данные команды. Это уже ответил. Что касается остальной части вашего примера скрипта;

Немного более короткая версия:

mv ~/myStuff.conf  ~/myStuff.conf.$(date +%s)

Нет необходимости устанавливать переменную для чего-то, что вам нужно или используется только один раз. Кроме того, чтобы быть совместимым с большим количеством оболочек, вы также можете использовать этот синтаксис:

mv ~/myStuff.conf  ~/myStuff.conf.`date +%s`

Мне просто кажется, что использование метки даты в качестве расширения устраняет необходимость в дополнительном .bak в имени файла.

1
--[[z4us|binz--]]

export datevar=`date` # date embedded in backquotes

--[[z4us|binz--]]

echo $datevar

Lun 25 Gen 2016 15:56:14 CET

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .