Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/02/2017, à 16:25

DonutMan75

[RESOLU] [BASH] Alias qui ne fonctionne pas dans un bashrc...

Bonjour à tous,
j'ai édité mon ~/.bashrc afin de rajouter un alias header qui se contente de créé sur la sortie standard un prototype de header de code.

Idéalement, j'aimerais un comportement du style :

$ header
% <titre>
% AUTHOR :  Donut
% DATE   :  <YYYY-MM-DD>
% INPUTS :
%   - x1 : <description>
%   - x2 : <description>
% OUTPUTS:
%   - y1 : <description>
%   - y2 : <description>
% <DESCRIPTION>
% <DESCRIPTION>

Voici mon ~/bashrc modifié :

alias header='echo <<FIN
% <titre>
% AUTHOR :  Donut
% DATE   :  <YYYY-MM-DD>
% INPUTS :
%   - x1 : <description>
%   - x2 : <description>
% OUTPUTS:
%   - y1 : <description>
%   - y2 : <description>
% <DESCRIPTION>
% <DESCRIPTION>
FIN
'

Hélas ça ne marche pas :

$ header
$

Curieusement, si je tape 'FIN' en deuxième commande ça m'affiche le header PLUS un message d'erreur...

$ header
$FIN

bash: PROMPT_COMMAND: line 1: syntax error near unexpected token `newline'
bash: PROMPT_COMMAND: line 1: `echo <<FIN
% <titre>
% AUTHOR :  Donut
% DATE   :  <YYYY-MM-DD>
% INPUTS :
%   - x1 : <description>
%   - x2 : <description>
% OUTPUTS:
%   - y1 : <description>
%   - y2 : <description>
% <DESCRIPTION>
% <DESCRIPTION>
FIN'

Pour info :

$ env | grep SHELL
SHELL=/bin/bash

Avez-vous des idées ?
L'utilisation d'étiquette avec echo n'est pas standard ??
Mon hypothèse serait que j'utilise l'écho du shell (built-in) quii aurait un comportement différent...

Merci d'avance !

Donut

Dernière modification par DonutMan75 (Le 03/02/2017, à 16:44)

Hors ligne

#2 Le 03/02/2017, à 16:36

DonutMan75

Re : [RESOLU] [BASH] Alias qui ne fonctionne pas dans un bashrc...

Pour info, j'ai même essayé de mettre ce bout de code dans un seul script mais ça ne fonctionne pas mieux.... sad

Fichier "header" :

#! /bin/sh
echo << FIN
% <titre>
% AUTHOR : Donut
% DATE   :  <YYYY-MM-DD>
% INPUTS :
%   - x1 : <description>
% OUTPUTS:
%   - y1 : <description>
%   - y2 : <description>
% <DESCRIPTION>
% <DESCRIPTION>
FIN
$ chmod u+x header
$ ./header
$

Hors ligne

#3 Le 03/02/2017, à 16:44

DonutMan75

Re : [RESOLU] [BASH] Alias qui ne fonctionne pas dans un bashrc...

Bon en cherchant un peu, j'ai trouvé deux améliorations :

J'ai remplacé echo par cat (si quelqu'un peut m'expliquer la différence fondamentale, je suis preneur !) : le script fonctionne mais toujours pas l'alias.
J'ai remplacé l'alias par une fonction car j'ai l'impression que l'alias ne gère pas les commandes s'étalant sur plusieurs lignes (confirmez-vous ?).

Auquel cas, ça a l'air de bien fonctionner smile

A bientôt,

Donut

Dernière modification par DonutMan75 (Le 03/02/2017, à 16:58)

Hors ligne

#4 Le 03/02/2017, à 17:46

Watael

Re : [RESOLU] [BASH] Alias qui ne fonctionne pas dans un bashrc...

salut

echo affiche une chaîne, entre guillemets de préférence, et impérativement si elle s'étend sur plusieurs lignes..
cat affiche le contenu d'un fichier, un here-string  (<<eof...eof), quelque part dans les entrailles du système, est un fichier.

il n' y pas de man sur ubuntu ?

lorsque tu modifies un fichier .bash... il faut le source*r pour que les changement deviennent effectifs dans l'environnement courant.

* cf. man bash !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 10/02/2017, à 18:00

DonutMan75

Re : [RESOLU] [BASH] Alias qui ne fonctionne pas dans un bashrc...

Bonjour Watael,
merci pour ta réponse smile

Oui je vois bien la différence entre echo et cat

$ echo "toto"
$ cat ./toto.txt

Néanmoins, je pensais intialement que l'utilisation d'une étiquette (<< FIN blablabla FIN) générait une chaîne de caractères et que, par conséquent, l'utilisation de la commande "echo" était adaptée (à la différence de cat qui travaille sur des fichiers...).

D'après ma compréhension de ton message, j'en déduis qu'une étiquette génére un flux de caractère avec un caractère 'EOF' à la fin, comme un fichier en fait... Ceci expliquerait en particulier que la commande suivante marche (bien que peu utile en pratique) :

$ cat ./toto.txt | cat

Voir même :

$ cat ./toto.txt | cat | cat | cat | cat

Merci pour tes éclaircissements en tout cas,
j'ai bien tenté le man mais bon, comment trouver de la doc sur les étiquettes ? ^^'


Bonne journée,

Donut

Dernière modification par DonutMan75 (Le 10/02/2017, à 18:03)

Hors ligne