Execute um comando e coloque os resultados em uma variável… tudo em um script bash [duplicado]

1

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?

    
por CamelBlues 10.02.2011 / 21:40

3 respostas

5

Isso é possível com a substituição de comandos .

DATEVAR=$(date +%s)
    
por 10.02.2011 / 21:48
1
--[[z4us|binz--]]

export datevar='date' # date embedded in backquotes

--[[z4us|binz--]]

echo $datevar

Lun 25 Gen 2016 15:56:14 CET
    
por 25.01.2016 / 15:57
1

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.

    
por 08.09.2016 / 03:50