flandatico
(usa Ubuntu)
Enviado em 19/11/2013 - 07:20h
Nossa!
Hoje, depois de um bom tempo, enquanto pesquisava algumas coisas na internet, encontrei este tópico que eu mesmo criei e resolvi postar a solução que encontrei para o meu problema. Não é a solução mais inteligente, mas funciona:
Meus scripts são sempre divididos em funções e esta é uma das que enviam arquivos via SCP e informam o progresso com o Zenity:
Envia_Arquivos()
{
while [ "${DIRETORIO}" = "" ];
do
DIRETORIO=$(zenity --list --width=300 --height=280 \
--title="Titulo da Caixa" \
--text "Escolha um diretório" \
--column "Diretório" \
"Diretório_1" \
"Diretório2" \
"Diretório3" \
"Diretório4" \
"Diretório5");
#Esta aqui é só uma função que verifica se o usuário escolheu a opção Sair/Cancelar. Eu sempre a chamo depois de uma caixa de diálogo. O que ela faz é testar o código de retorno do último comando, neste caso, o Zenity e, se o código for diferente de zero, então a execução do script é finalizada, senão, a vida segue.
RETORNO=$?
Verif_Exit ${RETORNO}
#Verifica se o diretório escolhido escolhida existe e/ou está vazio:
LOOP=$(ls -ltr ${DIR}/${DIRETORIO}/ 2> /dev/null | wc -l )
if [ ${LOOP} -gt 0 ]
then
(
for CONTADOR in $( seq 0 ${LOOP})
do
#Calcula a porcentagem que será exibida na barra de progresso
PROGRESSO=$(echo "(${CONTADOR}*100)/${LOOP}" | bc)
#Atualiza a barra de progresso
echo "${PROGRESSO}"
#Informa o progresso na caixa de diálogo
echo "# Enviando ${DIRETORIO}.\n${CONTADOR} de ${LOOP}, ${PROGRESSO}% concluído."
sleep 0.1
#Envia os arquivos para o servidor. OBS.: É importante ativar a troca de chaves SSH, para que o sistema não fique pedindo a senha.
scp ${DIR}/${DIRETORIO}/Arquivo.png ${USER_DESTINO}@${IP_DESTINO}:${DIR}/${DIRETORIO}/ &> /dev/null
# Alinha abaixo exibe a caixa de diáligo. Aqui está a resposta para minha pergunta. A opção que finaliza o processo quando o usuário decide fazê-lo é a opção "--auto-kill".
done) | zenity --progress --auto-close --auto-kill --percentage=0 --width=230 --height=100 --title="Titulo da Caixa"
else
#Diretório não encontrado
(zenity --error \
--window-icon="error" \
--title="Titulo da Caixa" \
--text="\"${DIRETORIO}\" não encontrado.")
return 1;
fi
RETORNO=$?
Verif_Exit ${RETORNO}
done
}
Então é isto pessoal, este é só um trecho adaptado do meu código. O importante aqui é mostrar a lógica que adotei e espero que sirva para mais gente.
Abraço!