Função em shell script executa apenas 1 tarefa por vez

#!/bin/bash

menu() {
	echo "Menu:"
	echo "1. Backup"
	echo "2. Restaurar"
	echo "3. Qtile-calm"
	echo "9. Sair"
	echo -n "Digite sua opção: "
	read option
	case $option in
	1)
		backup
		;;
	2)
		restore
		;;
	3)
		qtile_calm
		;;
	9)
		exit 0
		;;
	*)
		echo "Opção inválida."
		menu
		;;
	esac
}

backup() {
	mv ~/.config/qtile/config.py ~/.config/qtile/config-default.py
	if [ $? -eq 0 ]; then
		echo "Backup realizado com sucesso."
	else
		echo "Erro ao realizar o backup."
	fi
	menu
}

restore() {
	mv ~/.config/qtile/config-default.py ~/.config/qtile/config.py
	if [ $? -eq 0 ]; then
		echo "Restauração realizada com sucesso."
	else
		echo "Erro ao realizar a restauração."
	fi
	menu
}

qtile_calm() {
	if [ -f ~/.config/qtile/config.py ]; then
		backup
		ln -sf ~/.config/qtile/qtile-calm/config.py ~/.config/qtile/config.py
		if [ $? -eq 0 ]; then
			echo "Qtile-calm ativado com sucesso."
		else
			echo "Erro ao ativar o Qtile-calm."
		fi
	else
		ln -sf ~/.config/qtile/qtile-calm/config.py ~/.config/qtile/config.py
		if [ $? -eq 0 ]; then
			echo "Qtile-calm ativado com sucesso."
		else
			echo "Erro ao ativar o Qtile-calm."
		fi
	fi

	menu
}

menu

As operações:
1, 2 estão ok

O problema esta na 3 que esta executando apenas 1 das tarefas em cada execução, fazendo com que eu tenha que escolher a op 3 2x seguida para concluir a tarefa

Menu:
1. Backup
2. Restaurar
3. Qtile-calm
9. Sair
Digite sua opção: 3
Backup realizado com sucesso.
Menu:
1. Backup
2. Restaurar
3. Qtile-calm
9. Sair
Digite sua opção: 3
Qtile-calm ativado com sucesso.

PS: O chatGPT não consegue avançar além disso :rofl:

A função qtile-calm chama a função backup que por sua vez chama novamente a função menu antes da função qtile-calm concluir, solicitando opções e interrompendo a tarefa.

Em vez de fazer cada função backup/restore/etc. chamar menu novamente, jogue menu dentro de um loop while true; do no corpo “principal” do script. É bem mais claro e permite reutilizar funções uma dentro da outra como você quer aqui.


Se você parar para pensar, a tarefa tecnicamente nunca é concluída, já que é uma segunda chamada da função qtile-calm que faz as mudanças. A segunda chamada só não empaca novamente porque backup muda o nome do arquivo antes de chamar menu e deixa o if falso.


Não ensinaram o princípio DRY pra IA, coitada.

1 curtida

ChatGPT tá piorando mesmo. Eu mandei fazer um script simples e ele resolveu com loop while true. Mas também perguntei bem be-a-bá e em inglês:

Can you create a basic bash script file? The requirement are:

  1. Every 30 seconds the script will run a timer function.
  2. The user has the option to type some keys, like ‘n’ for new, ‘d’ to delete and ‘q’ to quit, to run specific functions (yet to be done)

Daí a resposta dele foi bem boa e fui trabalhando nas funções separadamente.

Na verdade este código foi feito pelo chatGPT, esta função de chamar o menu toda hora eu não gostei, porém estava tentando solucionar as funcionalidades principais do script.

Eu ja vi algumas matérias comentando sobre isso de que a medida que o tempo passa o chatGPT fica menos assertivo.

E você se informando disso e analisando os erros que vem acontecendo no chatGPT, você chega a esta conclusão mesmo.

Para se ter uma ideia, nesta criação do script, tive que avisar o chatGPT pelo menos umas 5x sobre um erro grotesco que ele estava comentando, ele arrumava e no próximo prompt ele trazia este erro novamente.

Exemplo do erro:

ERRADO:
if [ -f ~/.config/qtile/config-default.py ]; then
        backup
    fi

CERTO:
if [ -f ~/.config/qtile/config.py ]; then
        backup
    fi

Outro erro que ele insistia em refazer

ERRADO:
if [ -f ~/.config/qtile/qtile-calm/config.py ]; then

CERTO:
 if [ -f ~/.config/qtile/config.py ]; then

Sem contar no loop eterno que ele entrava em quando apresentava um erro, ele alterava o código A para B, reportava o erro e ele apresentava o código A novamente e ai ficava nesse loop.

Voltando a o fato do ficar menos assertivo, não sei se isso é uma “sabotagem” para vender que a versão paga é mais assertiva ou vamos diminuir a eficiência em algumas situações senão não teremos matéria prima no futuro ou realmente com o tempo o modelo vai se degradando.

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.