Recomeçar de onde parou [RESOLVIDO]

1. Recomeçar de onde parou [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 05/07/2021 - 14:43h

Pessoas ... o título acho que já é auto explicativo ... mas vou dizer o que preciso ...

Preciso executar X ações mas preciso faze-las sequencialmente em em tempos distintos ... então digamos que o script execute a ação 1,2 e 3 hoje ... amanhã quando eu executar o script ele execute da 4 em diante ..

A principio pensei em armazenar o número da ação em algum lugar, em uma variável de ambiente ou em em arquivo de texto, mas aí travei em como fazer o script começar a rodar daquele ponto.

Alguma ideia de como indexar isso ???




  


2. Re: Recomeçar de onde parou [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 05/07/2021 - 15:43h

Sugestão simplória: como tu mesmo já tinha pensado, armazena o nome ou o número da ação (se tiver) em uma variável de modo que sempre a última ação ficará na variável. Depois, na próxima execução, leia a variável. Talvez não resolva teu problema, mas talvez a minha sugestão te dê uma idéia.
Pode usar o cron em conjunto também.



3. Re: Recomeçar de onde parou

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 05/07/2021 - 19:03h

Sugestão bem amadora:
if [ ! -f 1.log ]; then
comando 1 ; echo "executado" > 1.log
fi

if [ ! -f 2.log ]; then
comando 2 ; echo "executado" > 2.log
fi
...

Já já o Marcelo aparece pra humilhar a gente! ;)


4. Re: Recomeçar de onde parou

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 05/07/2021 - 20:19h

acho que eu já matei o que vou fazer ... vou fazer uma function 0 ( inicial ), essa function vai ler o conteúdo da variável, aí jogo um case para decidir qual a próxima function , as outras functions vao chamar os scripts externos, incrementar a variável e chamar a function seguinte ... sacaram aí ???



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




5. Re: Recomeçar de onde parou [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/07/2021 - 01:39h


Mauriciodez escreveu:

Pessoas ... o título acho que já é auto explicativo ... mas vou dizer o que preciso ...

Preciso executar X ações mas preciso faze-las sequencialmente em em tempos distintos ... então digamos que o script execute a ação 1,2 e 3 hoje ... amanhã quando eu executar o script ele execute da 4 em diante ..

A principio pensei em armazenar o número da ação em algum lugar, em uma variável de ambiente ou em em arquivo de texto, mas aí travei em como fazer o script começar a rodar daquele ponto.

Alguma ideia de como indexar isso ???

Boa noite Mauricio,
Segue sugestão:
#!/usr/bin/env bash
count=0;
for ((x=${count};x<$((count+3));x++));do
printf "Executando ação nº %03d\nHora %()T\n\n" $x
sleep 0.125;
done
echo -e "Começou na ação nº ${count}, \nPróxima execução: ação nº $x"
#Atualiza o contador
sed -i "/^count=/s/[0-9]\+/$x/" $0;


Obs: Se o script ficar executando constantemente, isso não vai funcionar.....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



6. Re: Recomeçar de onde parou

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 06/07/2021 - 19:53h

aí pessoas .. fiz algo aqui ( não consegui criar uma variável de ambiente global pelo scrip então fiz com arquivo mesmo )

#!/bin/bash

ARQ="$(pwd)/txt"

function fun_1 () {
echo "essa é a função um"
i=$((i+1))
echo $i > $ARQ
}

function fun_2 () {
echo "essa é a função dois"
}

if [ ! -e "$ARQ" ];then
echo "1" > $ARQ
fi

i=`cat $ARQ`
fun_$i


sugestões ?!?!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




7. Re: Recomeçar de onde parou [RESOLVIDO]

8. Re: Recomeçar de onde parou [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 06/07/2021 - 22:53h




o 'export' funciona no bash, no script não, quando o script é fechado a variável some, ou seja, ela (não sei pq) é criada local .. testa aí e me fala !!!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




9. Re: Recomeçar de onde parou

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/07/2021 - 02:24h

Mauriciodez escreveu:




o 'export' funciona no bash, no script não, quando o script é fechado a variável some, ou seja, ela (não sei pq) é criada local .. testa aí e me fala !!!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Mauricio, testei aqui e funcionou.....
exporta_count.sh
#!/usr/bin/env bash
export count=0;
[[ $0 =~ "bash" ]] && echo "Variável count exportada" || echo -e "Erro na exportação\nUso:\n. script\n"


funcoes.sh
#!/usr/bin/env bash

fun_0 () {
echo "Função Zero"
let count++;
}

fun_1 () {
echo "Função Um"
let count++
}

fun_2 () {
echo "Função dois"
let count++
}

fun_3 () {
count=0
echo -e "Função Três\ncount reiniciado\nCount:$count"
}

fun_${count}


Obs.:
Execute o
. exporta_count.sh
pontoespaçoscript
Feito isso, execute o funcoes.sh do mesmo modo.
. script faz com que os comandos sejam interpretados como se fossem digitados no terminal.

Colocando o contador "count", em funções, não consegui fazer funcionar, o contador fica sempre=0.
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



10. Re: Recomeçar de onde parou [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/07/2021 - 04:46h


msoliver escreveu:
...
Obs.:
Execute o
. exporta_count.sh
pontoespaçoscript
Feito isso, execute o funcoes.sh do mesmo modo.
. script faz com que os comandos sejam interpretados como se fossem digitados no terminal.

Colocando o contador "count", em funções, não consegui fazer funcionar, o contador fica sempre=0.



Marcelo, desse jeito não me serve ... esse script que estou montando é um script inicial para instalação e configuração completa do meu sistema a partir do SO em modo texto, a ideia aqui é mandar executar o script e ele já me devolver todo sistema montado, configurado justinho e logado, do jeito que gosto ... sacou aí !!!

eu tô achando que já cheguei na melhor solução ... caso não apareça outras sugestões mais tarde finalizo o tópico !!!

Abçs.

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




11. Re: Recomeçar de onde parou

bruno
leoLeo

(usa Outra)

Enviado em 07/07/2021 - 07:53h

Tenho duas sugestões:


#!/bin/bash

ARQ="$PWD/txt"

function fun_1 () {
echo "essa é a função um"
echo 1 > $ARQ
}

function fun_2 () {
echo "essa é a função dois"
echo 2 > $ARQ
}

#ler o arquivo de cache
[[ -e "$ARQ" ]] && i=$(<"$ARQ")

case ${i:-1} in
1) fun_1 ;&
2) fun_2 ;&
3) fun_3 ;;
esac


Em `man bash`, "Using ;& in place of ;; causes execution to continue with the list associated with the next set of patterns."
Ou seja, quando a execução da lista do case encontrar o operador ;&, ele vai continuar executando as listas de comandos subsequentes,
sem testar o próximo padrão da lista de afirmações.

Ao invés do case, pode fazer também:

((i<=1)) && fun_1
((i<=2)) && fun_2
((i<=3)) && fun_3



12. Re: Recomeçar de onde parou [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 07/07/2021 - 09:42h

Fiz assim:
#!/bin/bash

function contador() {
let n++
echo $n > comando.txt
read -p "Continuar? (y,n): "
if [ $REPLY = n ]; then
exit
fi
}

if [ ! -e comando.txt ]; then
echo "1" > comando.txt
fi

n=$(cat comando.txt)

for ((i=$n;i<=4;i++)) ; do
case $i in
1) echo "comando1" ; contador ;;
2) echo "comando2" ; contador ;;
3) echo "comando3" ; contador ;;
4) echo "comando4" ;;
*) exit
esac
done

echo "Fim!"





01 02