Je suis un débutant bash mais je voudrais créer un script dans lequel j'aimerais permettre à l'utilisateur de sélectionner plusieurs options dans une liste d'options.
Essentiellement, ce que je voudrais, c'est quelque chose de similaire à l'exemple ci-dessous:
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
(Tiré de http://www.faqs.org/docs/Linux-HOWTO/Bash-Prog-Intro-HOWTO.html#ss9.1 )
Cependant, mon script aurait plus d'options, et j'aimerais autoriser la sélection de multiples. Donc quelque chose comme ça:
1) Option 1
2) Option 2
3) Option 3
4) Option 4
5) Terminé
Il serait également utile d'avoir des commentaires sur ceux qu'ils ont sélectionnés, par exemple des signes plus à côté de ceux qu'ils ont déjà sélectionnés. Par exemple, si vous sélectionnez "1", je voudrais page pour effacer et réimprimer:
1) Option 1 +
2) Option 2
3) Option 3
4) Option 4
5) Done
Ensuite, si vous sélectionnez "3":
1) Option 1 +
2) Option 2
3) Option 3 +
4) Option 4
5) Done
De plus, s'ils ont de nouveau sélectionné (1), je voudrais qu'il "désélectionne" l'option:
1) Option 1
2) Option 2
3) Option 3 +
4) Option 4
5) Done
Et enfin, lorsque vous appuyez sur Terminé, j'aimerais qu'une liste de ceux qui ont été sélectionnés soit affichée avant la fin du programme, par exemple si l'état actuel est:
1) Option 1
2) Option 2 +
3) Option 3 +
4) Option 4 +
5) Done
Appuyez sur 5 pour imprimer:
Option 2, Option 3, Option 4
... et le script se termine.
Donc ma question - est-ce possible en bash, et si oui, quelqu'un peut-il fournir un exemple de code?
Tout conseil serait très apprécié.
Si vous pensez que
whiptail
c'est complexe, ici, il va un code bash uniquement qui fait exactement ce que vous voulez. C'est court (~ 20 lignes), mais un peu énigmatique pour un débutant. En plus d'afficher "+" pour les options cochées, il fournit également des commentaires pour chaque action de l'utilisateur ("option non valide", "l'option X a été cochée" / décochée, etc.).Cela dit, c'est parti!
J'espère que vous apprécierez ... c'était un défi assez amusant de le faire :)
la source
while menu && read -rp "$prompt" nums && [[ "$nums" ]]; do while read num; do ... done < <(echo $nums |sed "s/ /\n/g") done
git bash
sur Windows!Voici un moyen de faire exactement ce que vous voulez en utilisant uniquement les fonctionnalités de Bash sans dépendances externes. Il marque les sélections actuelles et vous permet de les basculer.
Pour ksh, changez les deux premières lignes de la fonction:
et le shebang
#!/bin/ksh
.la source
options=(*)
(ou d'autres modèles de globbing) vous obtiendrez une liste de fichiers dans le tableau. Le défi serait alors d'obtenir le tableau de marques de sélection (${opts[@]}
) zippé avec lui. Cela peut être fait avec unefor
boucle, mais il devrait être exécuté pour chaque passage dans lawhile
boucle externe . Vous voudrez peut-être envisager d'utiliserdialog
ouwhiptail
comme je l'ai mentionné dans mon autre réponse - bien qu'il s'agisse de dépendances externes.${opts[@]}
et enregistrer la chaîne, passée comme argument supplémentaire à la fonction, au lieu de+
).J'ai écrit une bibliothèque appelée questionnaire , qui est un mini-DSL pour créer des questionnaires en ligne de commande. Il invite l'utilisateur à répondre à une série de questions et imprime les réponses à stdout.
Cela rend votre tâche vraiment facile. Installez-le avec
pip install questionnaire
et créez un script, par exemplequestions.py
, comme ceci:Ensuite, exécutez
python questions.py
. Lorsque vous avez terminé de répondre aux questions, elles sont imprimées sur stdout. Il fonctionne avec Python 2 et 3, dont l'un est presque certainement installé sur votre système.Il peut également traiter des questionnaires beaucoup plus compliqués, au cas où quelqu'un voudrait le faire. Voici quelques fonctionnalités:
la source
J'ai utilisé l'exemple de MestreLion et rédigé le code ci-dessous. Il vous suffit de mettre à jour les options et les actions des deux premières sections.
la source
n1 SELECTION
est la partie cruciale pour augmenter le nombre de chiffres ..-n2 SELECTION
acceptera deux chiffres (par exemple 15),-n3
accepte trois (par exemple 153), etc.Voici une fonction bash qui permet à l'utilisateur de sélectionner plusieurs options avec les touches fléchées et l'espace et de confirmer avec Entrée. Il a une belle sensation de menu. Je l'ai écrit avec l'aide de /unix//a/415155 . Il peut être appelé comme ceci:
Le résultat est stocké sous forme de tableau dans une variable avec le nom fourni comme premier argument. Le dernier argument est facultatif et est utilisé pour rendre certaines options sélectionnées par défaut. Cela ressemble à ceci.
la source
Comme je n'ai pas trouvé d'alternative BASH appropriée pour prompt-toolkit (python), dialoguer (rouille) ou enquêteur (nœud), j'ai essayé par moi-même:
https://i.stack.imgur.com/6AyAI.png
https://asciinema.org/a/Y4hLxnN20JtAlrn3hsC6dCRn8 https://gist.github.com/blurayne/f63c5a8521c0eeab8e9afd8baa45c65e
la source
la source
easybashgui
.