Bonjour,
Utilisateur de bash depuis mes débuts, sur les conseils avisés d'un
Guru ;-), je me suis décidé à me mettre à zsh (je me demande comment
j'ai pas pu m'y mettre avant).
Lors de mes recherches de documentation je suis tombé sur une
documentation en français qui parle entre autre du globing étendu et
qui pourrait intéresser certains d'entre vous.
http://www.essi.fr/~buffa/cours/zsh/POLY/CoursZsh.ps.gz
M.
--
mail : kolter(a)openics.org
gpg : 0x414EC36E
jid : kolter(a)im.openics.org
irc : kolter@freenode
Christophe Martin wrote:
[...]
>> var='un truc'; sed -e "/$var/ !d"
>>
> [zap]
> bizrae tout de meme cette interpretation de !d entre " ...
> je ne peux pas tester, suis pas chez moi, mais les simple quote devraient
> fonctionner
>
> sed -e "/$var"'/!d'
yep, ça marche
sed -e "/$var/"' !d'
aussi (j'avais dû tester avec un espace entre " et '... en faisant un truc genre
sed -e "/$var/" '!d'
qui marche pas)
Daniel
> Christophe
Bonjour,
Je me retrouve confronté à un truc bête où je veux utiliser dans une expression sed une variable et la commande !d, par exemple
var='un truc'; sed -e "/$var/ !d"
!d est interprété par bash comme étant la dernière commande de l'historique qui commence par d...
Comment s'en sortir sans écrire
sed -e "/un truc/ !d"
??
Merci
Daniel
Bonjour tout le monde,
je viens de découvrir (grâce au zshwiki[1]) un petit style de complétion
vraiment très sympa. Imaginons, vous êtes en train de développer, vous
avez des fichiers du genre :
_application.rhtml attributes.rhtml groups.rhtml realms.rhtml
templates.rhtml users.rhtml
et vous travaillez souvent sur le même fichier, vous connaissiez sans
doute le ^[. (insert-last-word), mais il est également possible
d'utiliser le style de complétion file-sort, qui accepte les arguments
suivants :
access date links name size
change inode modification reverse time
il est donc possible, via un :
zstyle ':completion:*:*:vim:*' file-sort modification
de trier les fichiers proposés à la complétion en fonction de l'heure de
modification (par défaut le premier == dernier fichier modifié) du coup,
un simple vim <tab><tab> complétera le dernier fichier édité.
Voilà
[1] http://zshwiki.org/home/
--
http://asyd.net/home/ - Home Page
http://guses.org/home/ - French Speaking Solaris User Group
Voilà ce que ca donne un geek qui a envie de geeker mais qui n'a pas
d'internet ! Petit conseil, lisez jusqu'au bout, je pense que ca vaut le
coup.
Table des matières
----------------------------------------------------------------------
1] Quelques exemples de widget
-) push-line
-) history-search-{forward,backward}
-) insert-last-word
-) run-help
2] Astuces
-) zle
-) bindkey
3] Définir d'un nouveau widget
4] Création d'un nouveau widget : regex-edit
0] Introduction
----------------------------------------------------------------------
ZLE (zsh line editor) est le composant de zsh qui interagit avec
l'utilisateur, celui qui reçoit les entrées du clavier. Il est
composé en widgets, certains sont builtins, d'autres sont des scripts
zsh (répertoire zle).
Voici quelques widgets que j'affectionne particulièrement, la séquence
entre parenthèse correspond au raccourci du mode emacs. ( ^[
correspond à ESC)
1] Quelques exemples de widget
----------------------------------------------------------------------
push-line (^[q)
Garde en mémoire le buffer actuel (la commande à éxécuter), puis
proprose un nouveau prompt, pour finalement insérer le contenu
du précedent buffer.
Exemple :
% vi .zshrc (on appuie pas sur entrée mais sur ^[q)
% cd
% vi .zshrc (rajouté automatiquement par zsh)
Ce widget est particulièrement utile pour changer de répertoire
avant d'exécuter la commande voulue.
history-search-forward (^[n]
history-search-backward (^[p)
Recherche avant (^[n) ou arrière (^[p) dans l'historique en
utilisant le premier mot (i.e. la commande) en motif de recherche.
Personnellement, ces deux widgets me sont vraiment très utile, et je
les utilise régulièrement. Concrètement, voici ce que ca donne :
% ping guses.org
[.. nombreuses commandes autre que ping ..]
% ping cli.asyd.net
[.. nombreuses commandes autre que ping ..]
% ping
Une première utilisation de history-search-backward complétera
cli.asyd.net, le second complétera guses.org, finalement
history-search-forward complétera cli.asyd.net
insert-last-word (^[.])
Insère le dernier mot de la commande précédente
% ssh kaoru
% ping rei
% ssh
le premier ^[.] complétera rei
le second complétera kaoru
run-help (^[h)
Exécute la commande man (généralement) avec en argument le premier
mot (la commande donc)
2] Astuces
----------------------------------------------------------------------
Lister les widgets disponibles
% zle -l
Lister les raccourcis
% bindkey
Définir un nouveau raccourci
% bindkey <séquence> <widget>
Afficher en texte une séquence
% <Control-v> <séquence>
Par exemple, la succession de Control-V ESC p affichera ^[p
3] Définir un nouveau widget
----------------------------------------------------------------------
Il suffit de créer une fonction puis d'utiliser la commande zle de la
manière suivante :
% zle -N <nom widget> [<nom fonction>]
Il existe un certain nombre de variables disponibles dans le contexte
zle, mais généralement le but est de modifier la variable BUFFER.
4] Création d'un nouveau widget : regex-edit
J'ai toujours révé d'un widget me permettant d'appliquer une regex
à la commande en cours, en fait, j'aurais dû me motiver plus tôt,
car c'est vraiment simple !
Il suffit de créer une fonction qui modifie la variable BUFFER (l'une
des nombreuses disponible dans un contexte ZLE). Dans mon cas,
j'utilise le module read-from-minibuffer pour demander à l'utilisateur
de fournir la regex, puis je modifie chaque mot de $BUFFER sauf le
premier (la commande). Merci aux quelques scripts zle qui m'ont permis
de trouver read-from-minibuffer !
--%--
# Charge le module
autoload -U read-from-minibuffer
regex-edit () {
# variables locales
local REPLY words result
# fais un split de BUFFER (créer un tableau avec chaque mot)
words=(${=BUFFER})
# demande la regexp (et rempli la variable REPLY)
read-from-minibuffer "Regex:"
if [ -n $REPLY ]; then
# applique la regex sur les mots 2 à (longueur du tableau)
# et finalement reforme BUFFER à partir de la commande et du
# résultat
BUFFER="$words[1] $(echo $words[2,${#words}] | sed ${REPLY})"
fi
}
zle -N regex-edit
bindkey "^[e"] regex-edit
--%--
Attention, il n'y a pas de gestion d'erreur sur sed.
Petit test :
% echo toto
Regex: s/o/a/g
% echo tata
Et voilà, zsh, c'est magique !
--
http://asyd.net/home/ - Home Page
http://guses.org/home/ - French Speaking Solaris User Group
Bonjour mes amis expert linux,
Je souhaite obtenir l'heure GMT de plusieurs manières:
- en shell: aucun problème: date -u me donne bien -2H en été et -1H en hiver
- en perl: gmtime me donne bien -2H en été et -1H en hiver
- problème en C++: gmtime tout comme gmtime_r me donne -1H tout le
temps, été comme hiver et sur la même machine donc même config système
Quelqu'un aurait-il une idée?
Voici un programme de test c++:
#include <stdio.h>
#include <iostream>
#include <time.h>
int main(int argc, char **argv)
{
time_t temps_gmt, temps=time(NULL);
struct tm T;
gmtime_r(&temps,&T);
temps_gmt = mktime(&T);
cout << "heure GMT: " << ctime(&temps_gmt) << endl;
return 0;
}
à compiler avec g++ fichier.cpp -o testgmt, puis à exécuter ;)
Florent,
Bonjour à tous,
*/ Wiki
Le wiki http://cli.asyd.net/home/ est là pour vous, n'hésiter pas à y
contributer
*/ spam, autodiscard, adresse de l'émetteur
Suite à la recrudescence des spam sur les listes shell et emacs,
l'autodiscard mailman est activé. Tout post depuis une adresse ne
correspondant pas à un membre est *automatiquement* supprimé sans
messages d'erreur. Veillez donc à envoyer vos messages avec votre
adresse d'inscription.
Merci de votre attention
--
http://asyd.net/home/ - Home Page
http://guses.org/home/ - French Speaking Solaris User Group
Le widget de complétion _gnu_generic permet de définir de manière
automatique la complétion (uniquement pour les options) des programmes
acceptant l'argument --help au format GNU.
Démo: trouvez une commande GNU qui ne dispose pas de fonction de
complétion (as), il suffit alors de définir la complétion pour as avec :
compdef _gnu_generic as
zsh peut alors compléter les options (as --<tab>)
--
http://asyd.net/home/ - Home Page
http://guses.org/home/ - French Speaking Solaris User Group