1+ #! /bin/bash
2+ # chmod +x create.sh
3+
4+ # arrete le script avec des sécurités
5+ set -euo pipefail
6+
7+ # affiche le menu de sélection d'une liste d'options passées en argument
8+ # $1 titre, $2 options
9+ input_select () {
10+ local selected=0
11+ local titre=" $1 "
12+ local -n OPTIONS=" $2 "
13+ local key
14+
15+ draw_menu () {
16+ clear
17+ echo " $titre "
18+ echo
19+
20+ for i in " ${! OPTIONS[@]} " ; do
21+ if [[ $i -eq $selected ]]; then
22+ echo -e " 🟢 \e[32m${OPTIONS[$i]} \e[0m"
23+ else
24+ echo -e " ⚫ \e[31m${OPTIONS[$i]} \e[0m"
25+ fi
26+ done
27+ }
28+
29+ set +e
30+ while true ; do
31+ draw_menu
32+
33+ # Lit une touche sans affichage
34+ IFS= read -rsn1 key
35+
36+ # Flèches = séquence ESC + [A/[B
37+ if [[ $key == $' \x1b ' ]]; then
38+ IFS= read -rsn2 key
39+ case " $key " in
40+ " [A" ) (( selected-- )) ;; # haut
41+ " [B" ) (( selected++ )) ;; # bas
42+ esac
43+ elif [[ $key == " " ]]; then
44+ # Entrée
45+ break
46+ fi
47+
48+ # si on dépasse les bornes, on revient au début/fin
49+ (( selected < 0 )) && selected=$(( ${# OPTIONS[@]} - 1 ))
50+ (( selected >= ${# OPTIONS[@]} )) && selected=0
51+ done
52+
53+ set -e
54+ menu_selected=$selected
55+ # option selectionnée efface le menu
56+ clear
57+ return 0
58+ }
59+
60+ mapfile -t CONTAINERS < <( docker ps -a --format " {{.Names}}" )
61+ CONTAINERS+=(" Tous les conteneurs" )
62+
63+ input_select " Quelle contenaire choisir" CONTAINERS
64+ selectedNbPages=$menu_selected
65+ contenaire=(" ${CONTAINERS[$selectedNbPages]} " )
66+
67+ # action demander
68+ optionAction=(
69+ " logs -f"
70+ " start"
71+ " stop"
72+ " restart"
73+ " exec -it bash"
74+ )
75+ input_select " Quelle est action que vous voulez effectuer sur $contenaire " optionAction
76+ indexSelectedAction=$menu_selected
77+ action=(" ${optionAction[$indexSelectedAction]} " )
78+
79+ # exécuter la commande docker
80+ if [ " $contenaire " == " Tous les conteneurs" ]; then
81+ chemainCompose=" ./compose.dev.yaml"
82+ # log du docker compose
83+ if [ " $action " == " logs -f" ]; then
84+ docker-compose -f " $chemainCompose " logs -f
85+ elif [ " $action " == " start" ]; then
86+ docker compose --env-file .env.dev -f " $chemainCompose " up -d --build
87+ elif [ " $action " == " stop" ]; then
88+ docker compose --env-file .env.dev -f " $chemainCompose " down
89+ elif [ " $action " == " restart" ]; then
90+ docker compose --env-file .env.dev -f " $chemainCompose " down && docker compose --env-file .env.dev -f " $chemainCompose " up -d --build
91+ elif [ " $action " == " exec -it bash" ]; then
92+ echo " ⚠️ Impossible d'exécuter 'exec -it bash' sur tous les conteneurs en même temps."
93+ else
94+ echo " ⚠️ Action non reconnue."
95+ fi
96+ else
97+ # log du docker compose
98+ if [ " $action " == " logs -f" ]; then
99+ docker logs -f " $contenaire "
100+
101+ elif [ " $action " == " start" ]; then
102+ docker start " $contenaire "
103+ echo " ✅ Le contenaire " $contenaire " a démarré."
104+
105+ elif [ " $action " == " stop" ]; then
106+ docker stop " $contenaire "
107+ echo " ✅ Le contenaire " $contenaire " a été arrêté."
108+
109+ elif [ " $action " == " restart" ]; then
110+ docker restart " $contenaire "
111+ echo " ✅ Le contenaire " $contenaire " a été redémarré."
112+
113+ elif [ " $action " == " exec -it bash" ]; then
114+ docker exec -it " $contenaire " sh
115+
116+ else
117+ echo " ⚠️ Action non reconnue."
118+ fi
119+ fi
0 commit comments