#1 Le 23/01/2013, à 17:35
- Arbiel
Utilisation de lettres grecques comme options d'exécution d'un shell
Bonjour
Je voudrais interdire l'utilisation de certaines options lorsque le script est lancé depuis un terminal. J'ai prévu pour cela d'utiliser des lettres grecques, α, β, γ et δ, utilisées uniquement dans un lanceur Unity, par le biais des "actions" de ce lanceur (clic droit sur le lanceur dans la barre des lanceurs).
Apparemment getopts les remplace par des valeurs nulles.
Y a-t-il un moyen de lui faire accepter ces lettres ?
D'avance merci à quiconque pourra me fournir des indications sur le sujet.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 23/01/2013, à 21:49
- telliam
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
il faut surement que tu regardes l'aspect encoding de ton terminal, et la récupération de caractere qui ne sont pas en UTF-8
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#3 Le 24/01/2013, à 01:33
- Arbiel
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
Bonsoir
Merci pour ta remarque. Je n'ai pas encore vu comment la mettre en pratique, mais j'ai constaté ce soir, en faisant de nouveaux tests, que les lettres grecques présentent dans les options étaient codées sur deux caractères, en UTF16 donc, alors que les options "ordinaires" le sont sur un caractère, en UTF-8.
Je vais peut-être devoir les considérées comme des options longues, puisqu'elles occupent deux positions.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 24/01/2013, à 09:33
- pingouinux
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
Bonjour,
Il est possible de lire les arguments soi-même sans utiliser getops. Par exemple :
$ cat lecture.sh
#! /bin/bash
USAGE=" $0 $@\nUsage: $0 [-h] [-δ delta] -f nom_du_fichier"
delta=0
while [ "$1" ]
do
case "$1"
in
-δ) delta="$2"; shift;;
-f) fichier="$2"; shift;;
-h) echo -e "$USAGE"; exit ;;
--) shift; break;;
* ) echo "Argument inconnu : $1"; echo -e "$USAGE"; exit 1;;
esac
shift
done
echo fichier="$fichier" delta="$delta"
$ ./lecture.sh -h
./lecture.sh -h
Usage: ./lecture.sh [-h] [-δ delta] -f nom_du_fichier
$ ./lecture.sh -δ 5 -f toto
fichier=toto delta=5
Remarque :
En UTF-8, les caractères sont codés sur 1, 2, 3 ou 4 octets
e => \x65
é => \xc3\xa9
En UTF-16, les caractères sont codés sur 2 ou 4 octets
Hors ligne
#5 Le 24/01/2013, à 12:18
- Arbiel
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
Bonjour pingouinux
Merci pour ton intervention.
Effectivement la boucle que tu me présentes me paraît aussi simple à utiliser que getops. Elle présente par contre les inconvénients, certes mineurs pour ce qui me concerne, ni de ne permettre le regroupement de plusieurs options dans un groupe de lettres unique, pratique que les utilisateurs utilisent communément, ni d'accepter des arguments qui ne soient pas présentés par le biais d'une option.
Tu m'apprends également que les termes UTF-n ne désignent pas le nombre de bits du codage des caractères (je ne m'étais jamais penché sur ce problème). J'irai voir dans la documentation comment est représentée la longueur du codage.
Dois-je aussi conclure que si j'enregistre mes fichiers scripts et mes lanceurs en UTF-16, tous les caractères étant alors représentés sur 2 octets, getops devrait fonctionner ?
Enfin, son comportement actuel n'est-il pas un bogue ?
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#6 Le 24/01/2013, à 12:42
- pingouinux
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
Elle présente par contre les inconvénients, certes mineurs pour ce qui me concerne, ni de ne permettre le regroupement de plusieurs options dans un groupe de lettres unique
C'est exact.
ni d'accepter des arguments qui ne soient pas présentés par le biais d'une option
On peut donner des arguments supplémentaires. Si on ajoute cette ligne à la fin du script en #1 :
for i
do
echo "Argument supplémentaire : $i"
done
on obtient ceci :
$ ./lecture.sh -δ 5 -f toto -- arg1 arg2 arg3
fichier=toto delta=5
Argument supplémentaire : arg1
Argument supplémentaire : arg2
Argument supplémentaire : arg3
Dois-je aussi conclure que si j'enregistre mes fichiers scripts et mes lanceurs en UTF-16, tous les caractères étant alors représentés sur 2 octets, getops devrait fonctionner ?
Je ne sais pas.
Hors ligne
#7 Le 24/01/2013, à 13:07
- Arbiel
Re : Utilisation de lettres grecques comme options d'exécution d'un shell
Pour les arguments supplémentaires, je n'avais pas fait suffisamment attention à la ligne
--) shift; break;;
J'attends les résultats du test que je compte faire, et dont je rapporterai ici, pour marquer la conversation comme résolue.
Merci encore
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne