Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[OFF/SHELL] Script de tchat en local, des améliorations ?
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Thu May 22, 2008 6:05 am    Post subject: [OFF/SHELL] Script de tchat en local, des améliorations ? Reply with quote

Bonjour,

J'ai écrit un tout petit script au taff (que voulez vous faut bien s'amuser un peu). Je vous le propose ici pour savoir se que vous en pensez et si vous avez des idées pour l'améliorer ce serait encore mieux.

C'est un simple fichier qui fait office de tchat. Je l'ai écrit pour pouvoir dialoguer avec les utilisateurs locaux de la machine.

Ne soyez pas trop dur avec moi le bash, n'est pas mon langage favoris !

http://gdbabar.googlecode.com/svn/msg/xminou << c'est ici

Bonne journée,

RaX|.


Last edited by RaX on Fri May 23, 2008 7:35 am; edited 3 times in total
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Thu May 22, 2008 6:41 am    Post subject: Reply with quote

Tu peux gérer le signal émis par CTRL+C (SIGTERM ou SIGINT? me souviens plus) avec "trap"
Ça doit faire un truc comme ça je pense:
Code:

trap quit_chat SIGINT SIGTERM

_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
Mickael
Advocate
Advocate


Joined: 05 Sep 2005
Posts: 2383
Location: ~Belfort! - France - EU

PostPosted: Thu May 22, 2008 7:47 am    Post subject: Reply with quote

Manque juste des quotes : trap "quit_chat" SIGINT SIGTERM
_________________
À LIRE : COMMENT POSTER ET OBTENIR DE L'AIDE ?
Qui suis-je ? Bon j'ai relu, comme d'habitude, je suis bon a rien le vendredi
Qui suis-je ? Je ne serai jamais modo
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Thu May 22, 2008 7:49 am    Post subject: Reply with quote

Ok merci de la précision :)
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu May 22, 2008 8:20 am    Post subject: Reply with quote

Question con, pourquoi faire du bash et pas du posix ? ton code ne comprends aucune particularité bash ou presque (lu en travers) il serait donc intéressant de faire du POSIX pour être portable, pour vérifier, tester le script avec ash ou dash, puis remplacer le /bin/bash vers /bin/sh (qui n'est pas un lien vers /bin/bash sur tous les OS)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Thu May 22, 2008 3:36 pm    Post subject: Reply with quote

Pour les couleurs ?

Merci pour tips du "trap" ^^.
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3772
Location: Wellington, Aotearoa

PostPosted: Thu May 22, 2008 3:42 pm    Post subject: Reply with quote

RaX wrote:
Pour les couleurs ?

Merci pour tips du "trap" ^^.

Les couleurs de la façon dont tu les utilises, ça fonctionne quelque soit le shell... :roll: C'est une simple séquence d'échappement, qui ne dépend que d'un terminal compatible pour fonctionner, rien à voir avec le shell.
Par contre, si t'avais eu la bonne idée d'utiliser zsh, ya des facilités pour avoir les codes de couleurs ;)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Thu May 22, 2008 3:51 pm    Post subject: Reply with quote

Sous un shell Ubuntu (c'est pas mon serv !) avec le "#!/bin/sh" il ne gère pas correctement les couleurs. Voila ce que j'ai dans la sortie :
"-e \e[0;33m(17:48:21)\e[0;32m * rax has joined\e[0m".

Voila pourquoi j'ai utilisé bash.
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3772
Location: Wellington, Aotearoa

PostPosted: Thu May 22, 2008 4:43 pm    Post subject: Reply with quote

Fais sauter le -e, et remplace les \e par des les vrais échappements : ^[ ("Ctrl-V ESC" avec l'éditeur du bien ;p)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Fri May 23, 2008 6:02 am    Post subject: Reply with quote

Quote:
Fais sauter le -e, et remplace les \e par des les vrais échappements : ^[ ("Ctrl-V ESC" avec l'éditeur du bien ;p)


hihi oki, je fait ça :) (J'avais prévenu, je suis vraiment pas bon !!!)

Mais bon avec Geekounet, les gentils forumeurs et VIM+Google ça va p-e tenir a peu près la route au final.

En tous cas merci beaucoup :)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Fri May 23, 2008 6:33 am    Post subject: Reply with quote

Nickel pour les couleurs, Oserais-je vous demander si il est possible de remplacer les "\n" d'une manière similaire ??? (ha ba oui j'ai osé)
Ou dois-je faire des :

Code:
echo ""


Je cherche sur G[maitre du monde]oogle. Si vous répondez avant ... temps mieux :)
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3772
Location: Wellington, Aotearoa

PostPosted: Fri May 23, 2008 6:49 am    Post subject: Reply with quote

C'est mieux lisible de faire des echo pour chaque ligne même vide, sans être trop moche. Mais bon sinon, suffit d'un Ctrl-V <enter>, ça marche pour les codes de toutes les touches ça ;)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Fri May 23, 2008 7:11 am    Post subject: Reply with quote

Ouep c'est ce que j'ai fait mais ça ne saute pas de ligne, enfin les echo "" ça me va très bien, dernier bug sous Ubuntu (Je vous jure c'est pas une machine à moi) quand je repasse sous sh il ne reconnait pas les signaux SIGTERM SIGINT. Je cherche et je poste ici si je trouve quelque chose.
Quote:
En fait suffisait juste de virer le "SIG" SIGTERM devient TERM; SIGHUP devient HUP

(9h10 et j'ai tjs pas commencé a bosser outchhh.)
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Fri May 23, 2008 7:23 am    Post subject: Reply with quote

RaX wrote:

(9h10 et j'ai tjs pas commencé a bosser outchhh.)

10h20 ici et tout pareil :mrgreen: mais c'est pas un mal de temps en temps.
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
Desintegr
l33t
l33t


Joined: 25 Mar 2004
Posts: 863
Location: France - Orléans

PostPosted: Fri May 23, 2008 7:25 am    Post subject: Reply with quote

Je pense qu'echo tout seul est plus joli qu'echo "".
_________________
Gentoo ~AMD64
Hoc Volo, Sic Jubeo !
Mon wiki : http://desintegr.free.fr
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Fri May 23, 2008 9:56 am    Post subject: Reply with quote

Quote:
Je pense qu'echo tout seul est plus joli qu'echo "".

Mhouaii a vrai dire j'ai tjs mis les "", pourquoi ?? J'ai pas vraiment d'explication mais c'est un "TIC" de syntaxe ^^
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Sun May 25, 2008 12:58 pm    Post subject: Reply with quote

iop, sympa ton petit chat ;)

quelques commentaires en vrac puisque c'est ce que tu demandes :)

* juste parce que j'aime bien sed... mais il est possible d'utiliser le même trick avec grep.. (puis ton cut):
Pour la liste d'utilisateurs:
Code:
ps aux| sed -n "\#[f] $FILE_SOCKET#s/ .*//p"



* la commande /list n'est pas dans le menu /help! ;)

* Et il faudrait que tu rajoutes un quit_chat après ton "while read MSG", pour le cas ou l'utilisateur quitte par un simple ^D ( et donc pour tuer le tail -f qui tourne et ajouter un zoli message pour les zautres)

* Et pourquoi finir ton script par un "exit 1", si justement l'utilisateur termine par un ^D, c'est qu'à priori tout s'est bien passé nan?


* Ah, si aussi,
Code:
"_"*)
   #MSG=`echo $MSG | sed 's/_//1'`
   MSG="${MSG:1}"
   if [ ! "$MSG" = "" ]; then
     write_msg "$MSG"
   fi 
   ;; 
Pas besoin de sed ni echo pour ça :)

* Et puis en fait, si tu rendais l'espace après une commange obligatoire (style "/miaou txt" ou lieu de "/miaoutxt"), alors tu peux te permettre de te faire un traitemeent un peu plus générique (toujours le bienvenu en général..),:
quand tu optiens le contenu de ta variable ACTION, ou TXT, En gros ce que tu souhaites c'est supprimer le premier mot si il commence par un '/', tu peux faire un truc plus générique et le reprendre à chaque fois style:

Code:
 TXT=`echo "$1" | sed 's#^/[^ ]* ##'`


quand tu fais ça tu vois, qu'en fait tu pourrais même te passer de sed, et ne te servir que des fonctions d'expansion des 'paramètres' du shell (POSIX):
Code:
TXT="${1#/* }"


Ca devrait déjà simplifier ton code, et accélérer un peu le bouzin, mais... ça t'apporte un petit problème... Tu dois gérer les commandes envoyées sans argument différemment ( par exemple ne plus accepter: '/miaoutest' mais uniquement '/miaou test' pareil, /miaou seul ne devrait plus fonctionner exactement comme tu l'avais prévu, mais j'pense qu tu pourras faire joujou avec tout ça tout seul :)


* Et un dernier point: au lieu de faire appel à la commande 'whoami', interroge plutôt directement la variable $USER, ça fera toujours ça de gagné, et puis si vraiment tu y tenais, stocke la sortie de cette commande dans une variable et n'affiche plus après que cette variable.




Et a titre d'info, pour une substitution avec sed s/pattern//, sed ne va modifier par défaut que la première occurence de pattern, il est donc inutile de le lui préciser (s/pattern//1)

De même si tu veux afficher plusieurs ligne de texte, tu peux le faire avec echo comme tu l'as fait, mais également avec cat et ton shell par exemple
Code:
cat <<BLAH
1ère ligne
2ème ligne
3ème ligne
BLAH

Regarde dans (par exemple pour les puristes..) man bash, et cherche la section "Here Documents", tu verras ainsi que tu peux faire un cat<<BLAH, cat<<'BLAH', cat<<-BLAH, etc... bref, à regarder, c'est important et interessant :)
_________________
The End of the Internet!
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Sun May 25, 2008 3:42 pm    Post subject: Reply with quote

Merci "truc" je regarde plus en détails tes suggestions demain et j'intègre tout ça, c'est vraiment cool, ça me permet d'avancer un petit peu en scripting. C'était vraiment l'objet de mon message ici :)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Mon May 26, 2008 1:55 pm    Post subject: Reply with quote

le Boune Shell, n'aime pas bcp les ${VAR:1} il me sort un "Syntax error: Bad substitution" c'est triste :'(

sous "dash" même sous Ubuntu (outchh) /bin/sh -> dash
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon May 26, 2008 2:47 pm    Post subject: Reply with quote

C'est pas grave, on peut feinter...
Code:
echo ${VAR#?}


mouhahahahah (rire démoniaque... tout le monde l'aura reconnu... :P )

(Vérifié avec le sh de busybox)
_________________
The End of the Internet!


Last edited by truc on Mon May 26, 2008 3:46 pm; edited 1 time in total
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon May 26, 2008 2:54 pm    Post subject: Reply with quote

Quelle encyclopédie du shell ce truc!

Quoi quel truc? bah: truc! On parle pas d'un truc mais de truc, où t'as vu un truc toi? --> []
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Mon May 26, 2008 3:09 pm    Post subject: Reply with quote

Nan mais ouhai !! mais là c'était facile !! (c'est ce que ont dit toujours après avoir eût la réponse), mais plus dur un truc style ${VAR:2:1} c'est possible ??

(J'abuse du savoir de ce brave truc)
Back to top
View user's profile Send private message
Oupsman
Veteran
Veteran


Joined: 19 Jul 2004
Posts: 1042

PostPosted: Mon May 26, 2008 3:16 pm    Post subject: Reply with quote

Tient une réécriture de la commande talk :roll:
_________________
--
L'idéal de nouveauté semble avoir remplacé l'idéal de progrès. C'est bien triste.

----
Unix philosophy: "Do one thing and do it well."
systemd: "Try to do everything and do it wrong."
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Mon May 26, 2008 3:27 pm    Post subject: Reply with quote

Quote:
Tient une réécriture de la commande talk :roll:
C'est exactement ça sauf que là on a le droit de faire des /homer !
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon May 26, 2008 4:21 pm    Post subject: Reply with quote

RaX wrote:
Nan mais ouhai !! mais là c'était facile !! (c'est ce que ont dit toujours après avoir eût la réponse), mais plus dur un truc style ${VAR:2:1} c'est possible ??

(J'abuse du savoir de ce brave truc)


:twisted: tout est possible! C'est juste que ça ne sera pas forcément aussi lisible au final que de faire un sed.. (la il faudrait enchainer quelques commandes plus ou moins obscures pour pouvoir arriver à ce résultat, style(toujours avec le sh de busybox):
Code:
~ $ TT=123456789
~ $ echo ${TT:2:3}
sh: Syntax error: Bad substitution
~ $ # normalement avec bash: ${TT:2:3} => 345
~ $ len=${#TT}
~ $ echo $len
9
~ $ nb=$(($len - (2 + 3)))
~ $ echo $nb
4
~ $
~ $ while [ $nb -gt 0 ] ; do TT="${TT%?}" ; nb=$(($nb - 1)) ; done
~ $ echo $TT
12345
~ $
~ $ nb=2
~ $ while [ $nb -gt 0 ] ; do TT="${TT#?}" ; nb=$(($nb - 1)) ; done
~ $ echo $TT
345


Autant dire que c'est plus laborieux, et que soit il vaut mieux utiliser un vrai shell avec des vraies fonctions pour simplifier la vie (oui dans la vie faut avancer quoi...) soit il vaut mieu utiliser sed ;)


Voilai-voilou....
_________________
The End of the Internet!
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum