O comando puts in expect não mostra a mensagem na ordem em que deveria

0

Eu tenho alguns scripts para automatizar um processo e quero que a mensagem sobre qual etapa estou mostrada na janela de comando. Um trecho de código que eu tenho é:

puts "** Creation of $VMNAME on $HOST begins... **"
spawn ssh -l $USER $HOST
expect_after eof {exit 0}
set timeout 10

expect "(yes/no)?" { send "yes\r" }
expect "password:" { send "$PASSWORD\r" }
expect "~]#" { send "date\r" }
set timeout 1200

puts "** Transferring rhelvm img file to the $HOST... **"
expect "~]#" { send "scp  somelink/rhelvm-0-vol.img /storage/iso/\r" }
expect "Password:" { send "$TESTEMSPASS\r" }

puts "** Transferring the VM conf from $TESTEMSUSER to $HOST... **"
expect "~]#" { send "scp somelink/$VMNAME.conf /root\r" }
expect "Password:" { send "$TESTEMSPASS\r" }

puts "** Removing the $VMNAME... **"
expect "~]#" { send "/opt/ccm/bin/vmremove -f /root/$VMNAME.conf --force\r" }
sleep 10
expect "~]#" { send "rm -rf /storage/vmpool/*.img\r" }
sleep 10

puts "** Creating the $VMNAME... **"
expect "~]#" { send "/opt/ccm/bin/vmcreate -f /root/$VMNAME.conf -g  /storage/iso/rhelvm-0-vol.img -e\r" }
sleep 10

puts "** Starting the $VMNAME ... **"
expect "~]#" { send "virsh start $VMNAME\r" }
sleep 10

expect "~]#" { send "virsh list --all\r"}

expect "~]#" { send "date\r" }

puts "** Creation of $VMNAME is completed. **"
expect "~]#" { send "exit\r" }

mas o que obtenho na saída não é nesta ordem, por exemplo, mostra a mensagem de criação da VM, mas executa o comando rm -rf /storage/vmpool/*.img. Eu tentei coloca com -nonewline e send_user mas nada parece funcionar. Por favor me ajude !!

    
por Bebe 06.03.2017 / 17:45

1 resposta

0

Você pode precisar liberar o arquivo de saída. Após cada puts adicione a linha

 flush stdout

Veja o comando tcl flush . Alternativamente, você pode definir a saída para o modo não-buffer com uma única linha:

 fconfigure stdout -buffering none

Veja tcl fconfigure .

    
por 06.03.2017 / 18:03