Isso é possível com a substituição de comandos .
DATEVAR=$(date +%s)
Estou trabalhando em um script bash que faz o backup de um arquivo de configuração antes de copiar um novo arquivo.
Veja como meu snippet se parece:
mv ~/myStuff.conf ~/myStuff.conf.bak
cp ~/new/myStuff.conf ~/myStuff.conf
Toda vez que esse script é executado, gostaria que o backup tivesse um registro de data e hora unix no nome do arquivo. Eu tentei isso
DATEVAR=date +%s
mv ~/myStuff.conf ~/myStuff.conf.$DATEVAR.bak
Mas isso não funciona, já que a função de data não é executada e o bash a vê como uma string, e o arquivo resultante acaba sendo
myStuff.conf.date+%s.bak
Alguma idéia de como obter os resultados da função de data em uma variável?
Isso é possível com a substituição de comandos .
DATEVAR=$(date +%s)
--[[z4us|binz--]]
export datevar='date' # date embedded in backquotes
--[[z4us|binz--]]
echo $datevar
Lun 25 Gen 2016 15:56:14 CET
Isso não responde à variável que contém a saída de um comando. Isso já está respondido. Quanto ao resto do seu script de exemplo,
Uma versão mais curta:
mv ~/myStuff.conf ~/myStuff.conf.$(date +%s)
Não é necessário definir uma variável para algo que você precisa ou usa apenas uma vez. Além disso, para ser compatível com mais shells, você também pode usar essa sintaxe:
mv ~/myStuff.conf ~/myStuff.conf.'date +%s'
Parece-me que ter o datestamp como uma extensão elimina a necessidade do arquivo adicional .bak no nome do arquivo.
Tags bash bash-scripting