Hal: Partie 3 Fonctions

Gazette Linux n°185 - Avril 2011

par Henry Grebler (Copyright © 2011)

traduction par Yasmina Hamamouche (tous droits réservés) yasmine.hamamouche@live.fr


J'ai commencé cette serie avec HAL: Partie 1 Préliminaires. J'ai suivi cela avec HAL: Partie 2 Mes Alias Favori . Cet article traite des fonctions et un autre parlera de son exécution.

Dans le premier article il y avait un lien qui permettrait au lecteur de télécharger mon HAL. Vous y trouverez 63 fonctions. Mon utilisation de pseudonymes précède mon utilisation de fonctions, donc je m'attendrais à ce que moins de fonctions soient obsolète.

Et pourtant, bien que je suis passé par mes fonctions en écrivant cet article, j'ai trouvé plusieurs que je n'utilise plus.

Notez que parfois, vous remarquerez une fonction (par exemple, 'help'), et une autre avec le même nom avec «o» à la fin ('helpo'). C'est ma convention pour l'ancienne version d'une fonction. Elle me permet de faire des expériences en modifiant une fonction, persuadé que je peux facilement invoquer la version précédente qui fonctionnait bien.

En écrivant cet article, j'ai appris un truc. Pour lister tous les alias, l'un émet simplement la commande alias sans argument. Comment puis-je inscrire bash fonctions? Dans le passé, j'ai utilisé set, mais qui répertorie toutes les variables ainsi que des fonctions. Finalement, j'ai découvert le less-than-obvious declare -f.

		* * * * * * * * * * * * *

	BSD_su HP_su Linux_su

La commande su doit être la commande la plus particulière trouvé sur les plates-formes Unix-like. Dans ~/.bashrc, je définis des fonctions pour chaque plate-forme. Près du bas de ce fichier J'ai mis l'alias su en fonction de la plate-forme actuelle.

Sur une machine FreeBSD, je vois cela:

	type -a su
	su is aliased to `BSD_su'
	su is /usr/bin/su

Alors que sur une machine Linux je vois cela :

	type -a su
	su is aliased to `Linux_su'
	su is /bin/su
		* * * * * * * * * * * * *

	alias

La fonction d'alias a été discuté dans la partie 2 . C'est sans doute la peine de répéter.

Normalement, vous devez écrire

        alias name=value

Ma fonction me permet d'écrire

        alias name value

C'est pourquoi dans $HOME/.ENV./.cshrc_bash vous verrez tous les alias définis sans l'utilisation d'un signe égal (=).

J'ai commencé à utiliser c-shell avant que je découvre bash (qui trouve son origine vers 1989). Dans c-shell, la syntaxe pour les alias n'utilise pas le signe égal:

        alias name wordlist

Ma fonction a facilité la transition de c-shell à bash.

		* * * * * * * * * * * * *

	cutf

Pour de nombreuses exigences, cut est beaucoup plus souple (flexible) que awk. La syntaxe comme -f 3-7, imprègne cut avec une facilité qui est largement supérieur à celui de awk. Cependant, cut est beaucoup plus restrictive dans sa notion d'un champ; alors que awk comprend les champs d'une façon plus humaine. Si un délimiteur n'est pas spécifié à awk, il traite l'espace blanc comme un délimiteur. Le délimiteur par défaut pour cut est l'onglet.

Je pense que j'avais l'intention de mettre en place ma fonction cutf au fil du temps. En l'occurrence, elle m'a bien servi dans son incarnation initiale.

Je peux (et souvent) écrire quelque chose comme

	scan | grep -i article | cutf 1

de préférence à

	scan | grep -i article | awk '{print $1}'

C'est juste tellement plus pratique.

Voici pourquoi je pourrais le faire. Cet exemple est tiré de la façon dont je gère mon courrier avec nmh. J'ai édité un peu pour plus de lisibilité.

$ scan | grep -i article
  30 -14Feb2011 Ben Okopnik        Re: Article (peut-être): La vie peut être dure
  33  14Feb2011 Ben Okopnik        Re: Article mis à jour:  Tout que vous avez toujours
  52  19Feb2011 Ben Okopnik        Re: Arrondir les articles
$ aaa=`scan | grep -i article | cutf 1`
$ refile $aaa +lg

La première commande affiche un résumé des e-mails actuels (dans ma boîte), 1 ligne par e-mail, pour ces lignes dans lesquelles la chaîne «article» apparaît. Dans la seconde commande, je rassemble tout le premier champ de chaque ligne (les numéros de message). La troisième commande déplace les messages sélectionnés vers un autre dossier.

Je pouvais faire ce qui précède en moins de lignes, mais ce n'est pas mon objectif ici.

		* * * * * * * * * * * * *

	dc

Cette fonction se plie à mon apparente frappe dyslexique. J'obtiens souvent de l'ordre de mes caractères erronés. Je peux taper dc $ HOME lorsque je voulais taper cd $ HOME. Il existe une commande dc (une calculatrice de précision arbitraire), mais la façon dont je l'utilise, il faut normalement pas d'arguments. La dc fonction vérifie s'il ya un seul argument, et si ce seul argument est un répertoire, et si il fait ce que j'ai voulu dire plutôt que ce que j'ai dit. Si je tape dc, sans args, il invoque la commande dc

Évidemment, je n'utilise jamais la première forme délibérément.

		* * * * * * * * * * * * *

	dirs dsd dsdc dth files links

Ce sont toutes des variations sur la commande ls. dirs montre seulement les répertoires; files montre seulement les fichiers réguliers; links montre des liens symboliques. dsd affiche toutes les entrées à l'exception des fichiers de sauvegarde emacs avec la redirection du résultat par more.

dsdc est comme dsd, mais montre seulement les entrées avec la date du jour (le courant). Il s'est avéré être un tremplin. Je pense que quelque chose comme dsdc existé sur VMS. Rien de semblable n'était disponible sur Linux. Cependant, actuellement dth a presque complètement supplanté dsdc.

La fonction dth a été discuté de manière exhaustive dans Ce qui importe vraiment ou l’article de comptage.

		* * * * * * * * * * * * *

	gt_doit gttv gttvu gtx

En substance, gttv est une fonction qui indique la table des matières d'un fichier tar-zippé. Il effectue gunzip ou bunzip2 (en fonction du type de fichier) canalisé dans "tar-tvf -" canalisé dans mon téléavertisseur. gttvu fait tout ce qui précède précédée d'une uudecode (pas si fréquent de nos jours). gtx est comme gttv sauf qu'il décompresse un fichier tar-zippé.

gt_doit est tout simplement la fonction d'aide invoquée par les autres fonctions.

		* * * * * * * * * * * * *

	help

Cette fonction est décrite en détail dans Techno-Réflexions de Henry: Mon système d’aide .

		* * * * * * * * * * * * *

	lesh

Une de mes fonctions les plus fréquemment utilisées. Pensez-y comme un croisement entre less et dth. Sans argument, elle fonctionne comme less sur le fichier le plus récent dans le répertoire courant. Si le premier argument est de la forme +n, il affiche les premiers n fichiers dans le répertoire courant, ou, s'il ya args après le +n, les premiers n fichiers qui correspondent aux args restants. Si args sont des fichiers, ils sont les candidats pour les plus récents, si ils sont des répertoires, les fichiers contenus dans ces répertoires sont les candidats.

Par exemple, lesh +3 / var / log pour afficher les 3 plus récents fichiers dans le répertoire log du système.

La section "Ma commande 'less' " dans Techno-Réflexions de Henry: Mon système d’aide explique pourquoi cela me permet de parcourir plusieurs fichiers facilement.

		* * * * * * * * * * * * *

	lest

Je devrais vraiment utiliser le concept de cette fonction plus en détail. Disons que j'ai le script. Cela pourrait être le mien, Ou un quelque part sur le système; je connais son nom; c'est sur ​​mon chemin; mais je ne peux pas me souvenir où il est. Ou je peux me rappeler où il est, mais je ne m'inquiète pas vraiment. Je veux juste regarder avec less. lest scriptname le trouver et l'ouvrir. Par exemple, irb est un script ruby dans / usr / local / bin. lest irb l'ouvre dans less.

C'est une consolidation de mon comportement typique. Souvent, je me suis trouvé allant tapez la commance -a, puis voulant regarder dans le fichier dans la réponse.

Voici un meilleur exemple. Il montre que lest fonctionne également sur ​​les alias.

type -a tcu
tcu is aliased to `/home/henryg/scripts/tarcompressuuencode.sh'

less tcu n'a pas de sens ("tcu: Aucun fichier ou répertoire"). Mais lest tcu fonctionne très bien.

		* * * * * * * * * * * * *

	loc

C'est ma variation sur find. Avec un arg unique, il regarde dans l'arborescence du répertoire actuelle pour une entrée avec la série fournie quelque part dans son nom. Avec 2 args, il prend le premier comme le répertoire de la recherche.

Actuellement je pense qu'elle serait plus utile si elle était réécrite à faire "find | grep" plutôt que "find -name".

		* * * * * * * * * * * * *

	mangl

Parfois, j'ai l'impression qu'il ya des pages de manuel partout. Il est difficile de garder le rythme. Sur la plupart des systèmes que je gère, j'ai une assez bonne idée de l'endroit où les pages de manuel se situent. Mais même sur ces systèmes, certaines pages de manuel apparaîssent dans des endroits inattendus. Sur les systèmes que je visite, mais ne contrôlent pas, les pages de manuel pourraient être n'importe où. Si j'ai essayé apropos et man et n'ont toujours pas trouvé ce que je cherchais, je pourrais essayer locate. Si une page de manuel expose de l'intérêt, je peux utiliser mangl pathname pour obtenir la page de manuel formatée avec nroff.

Et, oui, le nom est un jeu de mots faible.

		* * * * * * * * * * * * *

	mcd

Une autre fonction simple qui obtient souvent une séance d'entraîneme. Essentiellement, mkdir plus cd : Faites un répertoire et cd à elle.

		* * * * * * * * * * * * *

	ping

Je n'ai jamais vu l'intérêt d'avoir le tintement implacablement frappant sur la porte de la machine à distance. Cela me rappelle Sheldon dans The Big Bang Theory: [knock, knock, knock] "Penny!" [knock, knock, knock] "Penny!" [knock, knock, knock] "Penny!"

/sbin/ping fw
PING fw (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=0.340 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.278 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.207 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.240 ms
...

Certes, une fois suffit:

ping fw
PING fw (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=0.277 ms

--- fw ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.277/0.277/0.277/0.000 ms

Sur Solaris, par défaut, tout ce que vous obtenez est une seule ligne: "fw is alive".

		* * * * * * * * * * * * *

	truss

Une foction très importante. Je suppose que j'ai rencontré truss sur Solaris. J'ai appris à utiliser et à aimer ça. Alors, bien sûr, quand je me suis déplacé vers d'autres plateformes, j'ai vite ressenti le besoin. Saveurs de Linux ont strace, FreeBSD a truss, mais les paramètres sont différents.

Une fois de plus, j'ai une fonction qui me cache ces particularités et me permet de passer à la tâche.

Et c'est à ce sujet

Je ne pense pas qu'il ya beaucoup plus à dire sur les fonctions. Seuls 14 descriptions d'environ 25 fonctions. Les autres ne valent pas la peine.


Henry Grebler

Henry a passé son temps à travailler avec des ordinateurs, principalement pour les fabricants d'ordinateurs ou les développeurs de logiciels. Ses premières expériences de l'ordinateur comprenent des vestiges tels que des cartes perforées, ruban de papier et ruban de mag. C’est son secret le plus sombre qu’il a été payé pour faire ce genre de choses, il aurait versé de l’argent pour être autorisés à le faire. Il en parler sauf à ses employeurs.

Il a utilisé Linux comme système d’exploitation puisque la famille a obtenu son premier PC en 1996. À l’époque, lorsque la famille a partagé un PC, c'est un programme d'installation de Windows/Slackware dual-boot. Maintenant que chaque membre a son propre ordinateur, Henry survit d’une certaine manière dans un monde purement Linux.

Il vit dans une banlieue de Melbourne, en Australie.


Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site http://www.traduc.org/Gazette_Linux

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.