Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 23/01/2013, à 18: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
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#2 Le 23/01/2013, à 22: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, à 02: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
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#4 Le 24/01/2013, à 10: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, à 13: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
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#6 Le 24/01/2013, à 13:42

pingouinux

Re : Utilisation de lettres grecques comme options d'exécution d'un shell

Arbiel #5 a écrit :

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, à 14: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
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

Haut de page ↑