Adicione essas 3 linhas de tcl
code no seu script expect
para obter o nome do servidor.
set fp [open "server_file.txt" r]
while {[gets $fp data] >= 0} {set servername [lindex [regexp -inline -all -- {\S+} $data] 0]}
close $fp
Eu tenho um arquivo com várias linhas, digamos:
server_file.txt:
[main]
server1 param1 param2 param3
server2 param1 param2 param3
Eu quero pegar o primeiro valor da última coluna para compor um nome de arquivo dentro de um script expect
para que o nome do arquivo seja: server2_030417T124700 , onde 030417T124700 é o atual data em que o arquivo foi criado.
Consegui alcançar a parte da data com estas linhas:
#!/usr/bin/expect -f
log_file ./log/post.log
<some_code>
system mv ./log/post.log ./log/post_[clock format [clock seconds] -format {%Y%m%dT%H%M%S}].log
Mas onde eu tenho " post _ " eu gostaria de ter " server2 " baseado na última linha do server_file.txt
Eu tentei fazer isso usando uma variável que executa o comando bash tail -1 server_file.txt | awk '{print $1}'
sem sucesso e acho que é possível fazê-lo sem usar o comando bash.
Isso foi feito evitando o comando tail
e usando a sintaxe apropriada para awk
quando executado do script expect
:
#!/usr/bin/expect -f
log_file ./log/post.log
set servername [exec awk {FNR>1 {print $1}} server_file.txt]
system mv ./log/post.log ./log/"$servername"_[clock format [clock seconds] -format {%Y%m%dT%H%M%S}].log