Je travaille sur un script bash qui sauvegarde un fichier de configuration avant de copier sur un nouveau fichier.
Voici à quoi ressemble mon extrait:
mv ~/myStuff.conf ~/myStuff.conf.bak cp ~/new/myStuff.conf ~/myStuff.conf
Chaque fois que ce script est exécuté, j'aimerais qu'il y ait la sauvegarde pour avoir un timestamp Unix dans le nom de fichier. J'ai essayé ceci
DATEVAR=date +%s mv ~/myStuff.conf ~/myStuff.conf.$DATEVAR.bak
Mais cela ne fonctionne pas, puisque la fonction de date ne s'exécute pas et bash le voit en tant que chaîne, et le fichier résultant finit par être
myStuff.conf.date+%s.bak
Des idées sur la façon d'obtenir les résultats de la fonction de date en une variable?
Ceci est possible avec la substitution de commande .
DATEVAR=$(date +%s)
--[[z4us|binz--]] export datevar=`date` # date embedded in backquotes --[[z4us|binz--]] echo $datevar Lun 25 Gen 2016 15:56:14 CET
Ceci ne répond pas à la variable contenant la sortie d'une commande. Cela a déjà été répondu. En ce qui concerne le reste de votre script d'exemple;
Une version un peu plus courte:
mv ~/myStuff.conf ~/myStuff.conf.$(date +%s)
Il n'est pas nécessaire de définir une variable pour quelque chose dont vous avez besoin ou ne l'utilisez qu'une seule fois. De plus, pour être compatible avec plus de shells, vous pouvez également utiliser cette syntaxe:
mv ~/myStuff.conf ~/myStuff.conf.`date +%s`
Il me semble simplement qu'avoir le datestamp comme extension élimine le besoin de la .bak supplémentaire dans le nom de fichier.