OVH Cloud OVH Cloud

mode shell ne reconnaît pas les alias de commande

19 réponses
Avatar
frangi
Bonjour,
Je trouve étrange que mes alias de commandes (Zsh et bash) ne soient pas
reconnus par GNU Emacs en mode shell.
Y a-t-il une solution, quelque chose de particulier à mettre dans ~/.emacs?
J'utilise surtout Zsh et mes alias sont définis dans
~/Library/init/zsh/aliases.
Avec bash, ils sont dans ~/.bashrc.
Une dernière précision: je suis sur Mac OS X 10.3.8
Merci
--
François GIRON
fgiron@mac.com

9 réponses

1 2
Avatar
Matthias
Bonjour,

Attention, le shell executé est de « nature différente » selon que
vous utilisez la commande `shell' (avec M-x shell) et la commande
`shell-command-on-region' : dans le second cas le shell n'est pas
interactif, il ne lit pas nécessairement les même fichiers de
configuration...

Dans le premier cas, vous ne devriez pas rencontrer de problème si les
fichiers d'initialisation du shell sont au point. Notez que vous
pouvez toujours bricoler une roue de secours dans un fichier nommé
`~/.emacs_SHELLNAME' (cf. la documentation de la commande `shell').

Dans le second cas, c'est le bazar. Par exemple j'ai un alias nommé
`ppl' défini dans .bashrc (qui est chargé dans les shells
interactifs) ; rien de surprenant dans le truc suivant :

[ ~]$ bash -c ppl
bash: line 1: ppl: command not found
[ ~]$ ppl
chauvin luc marckert meulien thiam
# users = 5

En espérant avoir eclairci les choses,
--
Matthias
Avatar
Matthieu Moy
Matthias writes:

[ ~]$ bash -c ppl
bash: line 1: ppl: command not found
[ ~]$ ppl
chauvin luc marckert meulien thiam
# users = 5



C'est pour ce genre de raisons que j'utilise très peu les alias.

Moi, j'ai ~/bin au début de mon $PATH, il contient beaucoup de liens
symboliques vers les commandes qui vont bien (genre, si je veux que l
appelle /bin/ls, je fais "ln -s /bin/ls ~/bin/l") et un certain nombre
de scripts de 1 ligne.

C'est indépendant du shell (il faut juste que ~/bin soit au début du
PATH), simple a maintenir, ...

--
Matthieu
Avatar
frangi
Je suis très perplexe. Après avoir plusieurs fois essayé vainement mon
alias "frpdflatex", motif de mon post, il fonctionne à présent
normalement ainsi que tous les autres alias, sans que j'ai rien touché
aux fichiers de configuration. J'ai juste modifié
~/Library/init/zsh/login en relisant hier soir en détail le dossier de
mosx.net (sur cette page, exactement:
http://www.mosx.net/dossiers/Shell-6.shtml).

Enfin, ça n'aura pas été pour rien si cela vous a permis de découvrir
une configuration intéressante de zsh (je la trouve personnellement
vraiment intéressante). Pourquoi donc cela ne fonctionnait-il pas?
Telle est la question. En tout cas, merci à vous.
--
François GIRON

Avatar
drkm
( François Giron) writes:

Je suis très perplexe.



Moi aussi :-)

Après avoir plusieurs fois essayé vainement mon
alias "frpdflatex", motif de mon post, il fonctionne à présent
normalement ainsi que tous les autres alias, sans que j'ai rien touché
aux fichiers de configuration. J'ai juste modifié
~/Library/init/zsh/login en relisant hier soir en détail le dossier de
mosx.net (sur cette page, exactement:
http://www.mosx.net/dossiers/Shell-6.shtml).



Je n'y ai pas vu grand-chose à propos de ce fichier. Mais d'après
la description qu'il en fait, je suppose qu'il l'exécute dans .zlogin,
et qu'il n'a donc aucune influence ici (le shell appelé depuis Emacs
n'est pas un shell de login).

Enfin, ça n'aura pas été pour rien si cela vous a permis de découvrir
une configuration intéressante de zsh (je la trouve personnellement
vraiment intéressante). Pourquoi donc cela ne fonctionnait-il pas?
Telle est la question.



Oui. Étrange ... Mais si cela fonctionne, c'est déjà un bon
point.

En tout cas, merci à vous.



Pas de quoi,

--drkm
Avatar
drkm
Matthieu Moy writes:

Moi, j'ai ~/bin au début de mon $PATH, il contient beaucoup de liens
symboliques vers les commandes qui vont bien (genre, si je veux que l
appelle /bin/ls, je fais "ln -s /bin/ls ~/bin/l") et un certain nombre
de scripts de 1 ligne.

C'est indépendant du shell (il faut juste que ~/bin soit au début du
PATH), simple a maintenir, ...



Je prends :-)

--drkm
Avatar
drkm
Matthias writes:

Attention, le shell executé est de « nature différente » selon que
vous utilisez la commande `shell' (avec M-x shell) et la commande
`shell-command-on-region' : dans le second cas le shell n'est pas
interactif, il ne lit pas nécessairement les même fichiers de
configuration...



D'après la page dont François dit s'être inspirée :

$ZDOTDIR/aliases : ce fichier est lu à chaque lancement d'un shell
interactif. Il doit contenir les définitions des alias.

Je trouve d'ailleurs bizarre de n'évaluer les aliases que dans les
shells interactifs ... Mais c'est sans doute là la réponse à sa
question.

--drkm
Avatar
Matthieu Moy
drkm writes:

Je trouve d'ailleurs bizarre de n'évaluer les aliases que dans les
shells interactifs ... Mais c'est sans doute là la réponse à sa
question.



sans doute pour éviter de modifier completement la sémantique d'un
script en fonction de la config utilisateur.

Exemple typique:

====== toto.sh ====== #!/bin/sh

...
rm foobar
...
==== fin toto.sh ====
Si l'utilisateur a un alias sur "rm", genre "rm -i", et hop, ton
script devient interactif.

Pire :

====== toto.sh ====== #!/bin/sh

...
ls | "un truc qui parse la sortie de ls"
...
==== fin toto.sh ====
Si tu t'es amusé a faire

alias ls="ls --avec --pleins-d'options -qui --tuent"

t'es mal !!

--
Matthieu
Avatar
frangi
Matthieu Moy writes:

drkm writes:
Je trouve d'ailleurs bizarre de n'évaluer les aliases que dans les


shells interactifs ... Mais c'est sans doute là la réponse à sa
question.



sans doute pour éviter de modifier completement la sémantique d'un
script en fonction de la config utilisateur.

Exemple typique:

====== toto.sh ====== > #!/bin/sh

...
rm foobar
...
==== fin toto.sh ==== >
Si l'utilisateur a un alias sur "rm", genre "rm -i", et hop, ton
script devient interactif.

Pire :

====== toto.sh ====== > #!/bin/sh

...
ls | "un truc qui parse la sortie de ls"
...
==== fin toto.sh ==== >
Si tu t'es amusé a faire

alias ls="ls --avec --pleins-d'options -qui --tuent"

t'es mal !!


Ça, c'est très intéressant, et l'explication excellente.
--
François GIRON

Avatar
lhabert
drkm :

Je trouve d'ailleurs bizarre de n'évaluer les aliases que dans les
shells interactifs ...



Le zshenv est fait pour toi. Tu comprendras vite ta douleur.
1 2