Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec :
~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais
avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf :
~$ time maCommande | grep real
mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure
le temps d'exécution de la commande "maCommande | grep real" et ensuite
fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai
vu plein d'options avec cette commande mais aucune ne marchaient. J'ai
fini par comprendre que le time que j'utilise dans 1) est une commande
interne de mon shell et que le time de 'man time' est /usr/bin/time, une
commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time
interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
pensais au départ que 'which time' le faisait mais justement il
m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des
commandes interne au shell (which cd n'affiche rien). Je sais bien que
ce sont les commandes internes qui priment, mais je ne les connais pas
toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time
commande interne time
~$ whichPourDeVrai
/usr/bin/pdflatex
Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec : ~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf : ~$ time maCommande | grep real mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure le temps d'exécution de la commande "maCommande | grep real" et ensuite fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai vu plein d'options avec cette commande mais aucune ne marchaient. J'ai fini par comprendre que le time que j'utilise dans 1) est une commande interne de mon shell et que le time de 'man time' est /usr/bin/time, une commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
time ... utilise la commande interne du bash /usr/bin/time utilise la commande externe
Sinon, il doit y avoir moyen de désactiver une commande interne ; mais pas le temps de chercher...
pensais au départ que 'which time' le faisait mais justement il m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des commandes interne au shell (which cd n'affiche rien). Je sais bien que ce sont les commandes internes qui priment, mais je ne les connais pas toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time commande interne time ~$ whichPourDeVrai /usr/bin/pdflatex
Ce serait une bonne idée... En attendant : help CommandeInterne sort quelque chose ; et help CommandeExterne sort en erreur.
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Le 24/08/2010 19:37, Francois Lafont a écrit :
Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec :
~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais
avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf :
~$ time maCommande | grep real
mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure
le temps d'exécution de la commande "maCommande | grep real" et ensuite
fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai
vu plein d'options avec cette commande mais aucune ne marchaient. J'ai
fini par comprendre que le time que j'utilise dans 1) est une commande
interne de mon shell et que le time de 'man time' est /usr/bin/time, une
commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time
interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
time ...
utilise la commande interne du bash
/usr/bin/time
utilise la commande externe
Sinon, il doit y avoir moyen de désactiver une commande interne ; mais pas le temps de chercher...
pensais au départ que 'which time' le faisait mais justement il
m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des
commandes interne au shell (which cd n'affiche rien). Je sais bien que
ce sont les commandes internes qui priment, mais je ne les connais pas
toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time
commande interne time
~$ whichPourDeVrai
/usr/bin/pdflatex
Ce serait une bonne idée...
En attendant :
help CommandeInterne
sort quelque chose ; et
help CommandeExterne
sort en erreur.
--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec : ~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf : ~$ time maCommande | grep real mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure le temps d'exécution de la commande "maCommande | grep real" et ensuite fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai vu plein d'options avec cette commande mais aucune ne marchaient. J'ai fini par comprendre que le time que j'utilise dans 1) est une commande interne de mon shell et que le time de 'man time' est /usr/bin/time, une commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
time ... utilise la commande interne du bash /usr/bin/time utilise la commande externe
Sinon, il doit y avoir moyen de désactiver une commande interne ; mais pas le temps de chercher...
pensais au départ que 'which time' le faisait mais justement il m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des commandes interne au shell (which cd n'affiche rien). Je sais bien que ce sont les commandes internes qui priment, mais je ne les connais pas toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time commande interne time ~$ whichPourDeVrai /usr/bin/pdflatex
Ce serait une bonne idée... En attendant : help CommandeInterne sort quelque chose ; et help CommandeExterne sort en erreur.
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Sergio
Le 24/08/2010 20:53, Xavier a écrit :
Francois Lafont wrote:
C'est juste, si which ne trouve rien, c'est une commande interne. Mais la réciproque n'est pas forcément vraie, en particulier avec time justement. J'ai ça :
~$ which time /usr/bin/time
Et moi, j'ai ça avec la commande type :
[ ~]$ type time time is a shell keyword [ ~]$ which time ...rien...
Merci ! $ type ls ls est un alias vers « ls --color=auto --group-directories-first » $ type man man est haché (/usr/bin/man) $ type firefox firefox est /usr/bin/firefox
C'est quoi une commande "haché" ?
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
C'est juste, si which ne trouve rien, c'est une commande interne. Mais
la réciproque n'est pas forcément vraie, en particulier avec time
justement. J'ai ça :
~$ which time
/usr/bin/time
Et moi, j'ai ça avec la commande type :
[xavier@enterprise ~]$ type time
time is a shell keyword
[xavier@enterprise ~]$ which time
...rien...
Merci !
$ type ls
ls est un alias vers « ls --color=auto --group-directories-first »
$ type man
man est haché (/usr/bin/man)
$ type firefox
firefox est /usr/bin/firefox
C'est quoi une commande "haché" ?
--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
C'est juste, si which ne trouve rien, c'est une commande interne. Mais la réciproque n'est pas forcément vraie, en particulier avec time justement. J'ai ça :
~$ which time /usr/bin/time
Et moi, j'ai ça avec la commande type :
[ ~]$ type time time is a shell keyword [ ~]$ which time ...rien...
Merci ! $ type ls ls est un alias vers « ls --color=auto --group-directories-first » $ type man man est haché (/usr/bin/man) $ type firefox firefox est /usr/bin/firefox
C'est quoi une commande "haché" ?
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Benoit Izac
Bonjour,
le 25/08/2010 à 01:40, Francois Lafont a écrit dans le message <4c74587b$0$21268$ :
C'est que tu n'as toujours pas compris ce que je tente de t'expliquer :
C'est possible, mais ce n'est pas de la mauvaise volonté de ma part, je t'assure. Par ailleurs, j'ai pourtant vraiment l'impression d'avoir compris ton exemple avec cd (on est dans /, on crée un "sous-shell", on bouge avec cd, on quitte le "sous-shell" avec exit et là hop est toujours à la case départ dans /), mais je n'ai pas compris pourquoi tu m'as montré cet exemple (je ne vois pas le lien avec ce que je voulais faire remarquer).
Je fais un petit rappel. À un moment, tu as écrit ceci (message à 22h26) :
« Les primitives (builtin) sont des commandes classiques *que l'on trouve dans le $PATH* » [...] J'en ai conclu que cd n'était pas dans le $PATH et que donc les primitives (builtin) ne sont *pas toutes* dans le $PATH
Où est mon erreur ci-dessus ?
Ok, rajoute « généralement » après « trouve » dans ma phrase ci-dessus et n'en parlons plus.
Maintenant tu n'as toujours pas compris pourquoi /bin/cd ne pouvait pas exister et /bin/read serait sans intérêt.
Cherche à comprendre pourquoi on a ce comportement : $ echo hello | read a $ echo $a hello $ echo salut | (read b) $ echo $b
$
-- Benoit Izac
Bonjour,
le 25/08/2010 à 01:40, Francois Lafont a écrit dans le message
<4c74587b$0$21268$426a74cc@news.free.fr> :
C'est que tu n'as toujours pas compris ce que je tente de t'expliquer :
C'est possible, mais ce n'est pas de la mauvaise volonté de ma part, je
t'assure. Par ailleurs, j'ai pourtant vraiment l'impression d'avoir
compris ton exemple avec cd (on est dans /, on crée un "sous-shell", on
bouge avec cd, on quitte le "sous-shell" avec exit et là hop est
toujours à la case départ dans /), mais je n'ai pas compris pourquoi tu
m'as montré cet exemple (je ne vois pas le lien avec ce que je voulais
faire remarquer).
Je fais un petit rappel. À un moment, tu as écrit ceci (message à 22h26) :
« Les primitives (builtin) sont des commandes classiques *que l'on
trouve dans le $PATH* »
[...]
J'en ai conclu que cd n'était pas dans le $PATH et que donc les
primitives (builtin) ne sont *pas toutes* dans le $PATH
Où est mon erreur ci-dessus ?
Ok, rajoute « généralement » après « trouve » dans ma phrase ci-dessus
et n'en parlons plus.
Maintenant tu n'as toujours pas compris pourquoi /bin/cd ne pouvait pas
exister et /bin/read serait sans intérêt.
Cherche à comprendre pourquoi on a ce comportement :
$ echo hello | read a
$ echo $a
hello
$ echo salut | (read b)
$ echo $b
le 25/08/2010 à 01:40, Francois Lafont a écrit dans le message <4c74587b$0$21268$ :
C'est que tu n'as toujours pas compris ce que je tente de t'expliquer :
C'est possible, mais ce n'est pas de la mauvaise volonté de ma part, je t'assure. Par ailleurs, j'ai pourtant vraiment l'impression d'avoir compris ton exemple avec cd (on est dans /, on crée un "sous-shell", on bouge avec cd, on quitte le "sous-shell" avec exit et là hop est toujours à la case départ dans /), mais je n'ai pas compris pourquoi tu m'as montré cet exemple (je ne vois pas le lien avec ce que je voulais faire remarquer).
Je fais un petit rappel. À un moment, tu as écrit ceci (message à 22h26) :
« Les primitives (builtin) sont des commandes classiques *que l'on trouve dans le $PATH* » [...] J'en ai conclu que cd n'était pas dans le $PATH et que donc les primitives (builtin) ne sont *pas toutes* dans le $PATH
Où est mon erreur ci-dessus ?
Ok, rajoute « généralement » après « trouve » dans ma phrase ci-dessus et n'en parlons plus.
Maintenant tu n'as toujours pas compris pourquoi /bin/cd ne pouvait pas exister et /bin/read serait sans intérêt.
Cherche à comprendre pourquoi on a ce comportement : $ echo hello | read a $ echo $a hello $ echo salut | (read b) $ echo $b
$
-- Benoit Izac
Damien Goutte-Gattat
On Wed, 25 Aug 2010 08:22:34 +0200, Sergio wrote:
type man man est haché (/usr/bin/man)
C'est quoi une commande "haché" ?
Ça veut dire que depuis son démarrage, bash a déjà eu à résoudre la commande "man", et qu’il a mis le résultat en cache. La prochaine fois qu’il rencontrera cette commande, il ne prendra pas la peine de parcourir à nouveau les répertoires du PATH pour la trouver, il exécutera directement /usr/bin/man.
La commande interne "hash" permet de manipuler le cache des commandes résolues, si pour une raison ou pour une autre on souhaite modifier ce comportement.
On Wed, 25 Aug 2010 08:22:34 +0200, Sergio wrote:
type man
man est haché (/usr/bin/man)
C'est quoi une commande "haché" ?
Ça veut dire que depuis son démarrage, bash a déjà eu à résoudre la
commande "man", et qu’il a mis le résultat en cache. La prochaine fois
qu’il rencontrera cette commande, il ne prendra pas la peine de parcourir
à nouveau les répertoires du PATH pour la trouver, il exécutera
directement /usr/bin/man.
La commande interne "hash" permet de manipuler le cache des commandes
résolues, si pour une raison ou pour une autre on souhaite modifier ce
comportement.
Ça veut dire que depuis son démarrage, bash a déjà eu à résoudre la commande "man", et qu’il a mis le résultat en cache. La prochaine fois qu’il rencontrera cette commande, il ne prendra pas la peine de parcourir à nouveau les répertoires du PATH pour la trouver, il exécutera directement /usr/bin/man.
La commande interne "hash" permet de manipuler le cache des commandes résolues, si pour une raison ou pour une autre on souhaite modifier ce comportement.
Erwan David
Francois Lafont écrivait :
Le 24/08/2010 22:26, Benoit Izac a écrit :
C'est quoi la nuance entre 'mot-clé' et 'primitive' ?
Les mots clés c'est « if », « while », « ! », « done », etc. Ce sont des mots qui change le comportement du shell lorsqu'ils sont les premiers mots d'une commande.
if true then while false do time sleep 10 done else { echo "hello" } fi Ici, tous les premiers mots sont des mots clés (reserved words selon POSIX).
Ok.
Les primitives (builtin) sont des commandes classiques que l'on trouve dans le $PATH qui ont été implémentées au niveau du shell. Ça permet d'éviter un fork à chaque appel.
Mais pourtant, chez moi, les commandes "builtin" ne sont pas toutes dans le $PATH.
~$ type cd cd est une primitive du shell ~/Bureau$ sudo find / -type f -name "cd" /usr/share/X11/xkb/symbols/cd /usr/share/screen/utf8encodings/cd /usr/share/zsh/help/cd
Ce ne sont pas des commandes cd. cd n'est d'ailleurs pas une commande car elle modifie l'état du processus shell.
~$ type read read est une primitive du shell ~/Bureau$ sudo find / -type f -name "read" /usr/share/zsh/help/read
Là tu tombes sur l'aide de la commande read de zsh...
~$ type printf printf est une primitive du shell ~$ sudo find / -type f -name "printf" /usr/share/zsh/help/printf
Là aussi c'est une aide...
/usr/bin/printf # la c'est dans le $PATH
un -exceutable dans le find aurait déjà restreint...
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
C'est quoi la nuance entre 'mot-clé' et 'primitive' ?
Les mots clés c'est « if », « while », « ! », « done », etc. Ce sont des
mots qui change le comportement du shell lorsqu'ils sont les premiers
mots d'une commande.
if true
then
while false
do
time sleep 10
done
else
{ echo "hello" }
fi
Ici, tous les premiers mots sont des mots clés (reserved words selon
POSIX).
Ok.
Les primitives (builtin) sont des commandes classiques que l'on trouve
dans le $PATH qui ont été implémentées au niveau du shell. Ça permet
d'éviter un fork à chaque appel.
Mais pourtant, chez moi, les commandes "builtin" ne sont pas toutes dans
le $PATH.
~$ type cd
cd est une primitive du shell
~/Bureau$ sudo find / -type f -name "cd"
/usr/share/X11/xkb/symbols/cd
/usr/share/screen/utf8encodings/cd
/usr/share/zsh/help/cd
Ce ne sont pas des commandes cd. cd n'est d'ailleurs pas une commande
car elle modifie l'état du processus shell.
~$ type read
read est une primitive du shell
~/Bureau$ sudo find / -type f -name "read"
/usr/share/zsh/help/read
Là tu tombes sur l'aide de la commande read de zsh...
~$ type printf
printf est une primitive du shell
~$ sudo find / -type f -name "printf"
/usr/share/zsh/help/printf
Là aussi c'est une aide...
/usr/bin/printf # la c'est dans le $PATH
un -exceutable dans le find aurait déjà restreint...
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
C'est quoi la nuance entre 'mot-clé' et 'primitive' ?
Les mots clés c'est « if », « while », « ! », « done », etc. Ce sont des mots qui change le comportement du shell lorsqu'ils sont les premiers mots d'une commande.
if true then while false do time sleep 10 done else { echo "hello" } fi Ici, tous les premiers mots sont des mots clés (reserved words selon POSIX).
Ok.
Les primitives (builtin) sont des commandes classiques que l'on trouve dans le $PATH qui ont été implémentées au niveau du shell. Ça permet d'éviter un fork à chaque appel.
Mais pourtant, chez moi, les commandes "builtin" ne sont pas toutes dans le $PATH.
~$ type cd cd est une primitive du shell ~/Bureau$ sudo find / -type f -name "cd" /usr/share/X11/xkb/symbols/cd /usr/share/screen/utf8encodings/cd /usr/share/zsh/help/cd
Ce ne sont pas des commandes cd. cd n'est d'ailleurs pas une commande car elle modifie l'état du processus shell.
~$ type read read est une primitive du shell ~/Bureau$ sudo find / -type f -name "read" /usr/share/zsh/help/read
Là tu tombes sur l'aide de la commande read de zsh...
~$ type printf printf est une primitive du shell ~$ sudo find / -type f -name "printf" /usr/share/zsh/help/printf
Là aussi c'est une aide...
/usr/bin/printf # la c'est dans le $PATH
un -exceutable dans le find aurait déjà restreint...
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Nicolas George
Francois Lafont , dans le message <4c751480$0$23246$, a écrit :
~$ echo hello | read a ~$ echo $a
zsh fait spécifiquement des efforts pour faire marcher ce genre de constructions. Avec un autre shell, tu peux essayer de comparer :
echo hello | sh -c 'read a; echo $a' echo hello | sh -c '(read a); echo $a'
Francois Lafont , dans le message
<4c751480$0$23246$426a74cc@news.free.fr>, a écrit :
~$ echo hello | read a
~$ echo $a
zsh fait spécifiquement des efforts pour faire marcher ce genre de
constructions. Avec un autre shell, tu peux essayer de comparer :
echo hello | sh -c 'read a; echo $a'
echo hello | sh -c '(read a); echo $a'
un -exceutable dans le find aurait déjà restreint...
Oui en effet et d'ailleurs, quitte à chercher une commande dans le $PATH, autant faire "which ma_commande" il me semble.
+1
et l'option -p du which de zsh est du pain bénit :
$ which which which: shell built-in command $ which -p which /usr/bin/which $
Très pratique dans mes shellscripts, lorsque je veux, par exemple, faire un wrapper pour une commande donnée :
$ ls () { echo "Listing $@" ; $(which -p ls) $@ }
Cela permet d'éviter d'appeller de façon récursive la fonction.. :o)
je le fais avec whence, je ne l'avais pas vu dans which. Mais c'est c'est la même chose.
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Benoit Izac
Bonjour,
le 25/08/2010 à 16:27, Francois Lafont a écrit dans le message <4c752845$0$28646$ :
tu as sûrement dû tester, non pas sur bash, mais sur un shell qui n'utilise pas de sous-shell dans un pipe lorsque la commande de droite est builtin ou un truc comme ça.
Effectivement, j'utilise zsh et ce n'est pas la première fois que son comportement me joue des tours. Non pas que je trouve qu'il soit mauvais (bien au contraire, c'est toujours mieux de ne pas forker) mais je devrais utiliser dash lorsque je fais mes tests.
Ai-je bien compris l'exemple que tu m'as donné ? (j'espère que oui cette fois ;-))
Parfaitement. Donc à partir de là tu peux comprendre qu'une commande cd ou read qui fork ne sert à rien.
-- Benoit Izac
Bonjour,
le 25/08/2010 à 16:27, Francois Lafont a écrit dans le message
<4c752845$0$28646$426a74cc@news.free.fr> :
tu as sûrement dû tester, non pas sur bash, mais sur un shell qui
n'utilise pas de sous-shell dans un pipe lorsque la commande de droite
est builtin ou un truc comme ça.
Effectivement, j'utilise zsh et ce n'est pas la première fois que son
comportement me joue des tours. Non pas que je trouve qu'il soit mauvais
(bien au contraire, c'est toujours mieux de ne pas forker) mais je
devrais utiliser dash lorsque je fais mes tests.
Ai-je bien compris l'exemple que tu m'as donné ? (j'espère que oui cette
fois ;-))
Parfaitement. Donc à partir de là tu peux comprendre qu'une commande cd
ou read qui fork ne sert à rien.
le 25/08/2010 à 16:27, Francois Lafont a écrit dans le message <4c752845$0$28646$ :
tu as sûrement dû tester, non pas sur bash, mais sur un shell qui n'utilise pas de sous-shell dans un pipe lorsque la commande de droite est builtin ou un truc comme ça.
Effectivement, j'utilise zsh et ce n'est pas la première fois que son comportement me joue des tours. Non pas que je trouve qu'il soit mauvais (bien au contraire, c'est toujours mieux de ne pas forker) mais je devrais utiliser dash lorsque je fais mes tests.
Ai-je bien compris l'exemple que tu m'as donné ? (j'espère que oui cette fois ;-))
Parfaitement. Donc à partir de là tu peux comprendre qu'une commande cd ou read qui fork ne sert à rien.
-- Benoit Izac
Benoit Izac
Bonjour,
le 25/08/2010 à 21:58, Francois Lafont a écrit dans le message <4c7575ee$0$12934$ :
À propos de zsh, je n'ai pas réussi à trouver dans 'man zshall' l'endroit il était dit que le pipe de ne créait pas de sous-shell. Avec le bash, j'ai pu trouver l'info sur ce point assez facilement.
Je ne sais pas.
1. ~$ echo toto 2. ~$ /bin/echo toto
c'est bien deux versions différentes de echo qui sont appelées ?
- dans la première instruction, c'est la commande builtin (dont le code est encapsulé dans /bin/bash), pas de processus enfant créé. - dans la deuxième, c'est la commande externe /bin/echo et un processus enfant est créé.
C'est bien cela ?
Oui.
Essaye (ça marche seulement avec echo de GNU coreutils) : $ echo --version $ /bin/echo --version
D'une manière générale, quand une commande du $PATH est appelée par son chemin absolu (pour éviter que le bash y voit une éventuelle commande builtin), y a-t-il toujours un processus enfant qui est créé ?
Oui, c'est le shell qui le crée avant d'exécuter la commande.
Par contre, comme expliqué précédemment tu peux faire « command foo » qui t'évite de savoir qu'elle est le chemin exact (il diffère selon les systèmes) et qui à l'avantage de respecter PATH ; si tu as un /usr/bin/foo et /bin/foo, selon que ton $PATH soit /bin:/usr/bin ou /usr/bin:/bin, ce ne sera pas le même qui sera exécuté. En donnant le chemin complet, tu perds ce comportement (ça peut être voulu) et la probabilité.
-- Benoit Izac
Bonjour,
le 25/08/2010 à 21:58, Francois Lafont a écrit dans le message
<4c7575ee$0$12934$426a74cc@news.free.fr> :
À propos de zsh, je n'ai pas réussi à trouver dans 'man zshall'
l'endroit il était dit que le pipe de ne créait pas de sous-shell. Avec
le bash, j'ai pu trouver l'info sur ce point assez facilement.
Je ne sais pas.
1. ~$ echo toto
2. ~$ /bin/echo toto
c'est bien deux versions différentes de echo qui sont appelées ?
- dans la première instruction, c'est la commande builtin (dont le code
est encapsulé dans /bin/bash), pas de processus enfant créé.
- dans la deuxième, c'est la commande externe /bin/echo et un processus
enfant est créé.
C'est bien cela ?
Oui.
Essaye (ça marche seulement avec echo de GNU coreutils) :
$ echo --version
$ /bin/echo --version
D'une manière générale, quand une commande du $PATH est appelée par son
chemin absolu (pour éviter que le bash y voit une éventuelle commande
builtin), y a-t-il toujours un processus enfant qui est créé ?
Oui, c'est le shell qui le crée avant d'exécuter la commande.
Par contre, comme expliqué précédemment tu peux faire « command foo »
qui t'évite de savoir qu'elle est le chemin exact (il diffère selon les
systèmes) et qui à l'avantage de respecter PATH ; si tu as un
/usr/bin/foo et /bin/foo, selon que ton $PATH soit /bin:/usr/bin ou
/usr/bin:/bin, ce ne sera pas le même qui sera exécuté. En donnant le
chemin complet, tu perds ce comportement (ça peut être voulu) et la
probabilité.
le 25/08/2010 à 21:58, Francois Lafont a écrit dans le message <4c7575ee$0$12934$ :
À propos de zsh, je n'ai pas réussi à trouver dans 'man zshall' l'endroit il était dit que le pipe de ne créait pas de sous-shell. Avec le bash, j'ai pu trouver l'info sur ce point assez facilement.
Je ne sais pas.
1. ~$ echo toto 2. ~$ /bin/echo toto
c'est bien deux versions différentes de echo qui sont appelées ?
- dans la première instruction, c'est la commande builtin (dont le code est encapsulé dans /bin/bash), pas de processus enfant créé. - dans la deuxième, c'est la commande externe /bin/echo et un processus enfant est créé.
C'est bien cela ?
Oui.
Essaye (ça marche seulement avec echo de GNU coreutils) : $ echo --version $ /bin/echo --version
D'une manière générale, quand une commande du $PATH est appelée par son chemin absolu (pour éviter que le bash y voit une éventuelle commande builtin), y a-t-il toujours un processus enfant qui est créé ?
Oui, c'est le shell qui le crée avant d'exécuter la commande.
Par contre, comme expliqué précédemment tu peux faire « command foo » qui t'évite de savoir qu'elle est le chemin exact (il diffère selon les systèmes) et qui à l'avantage de respecter PATH ; si tu as un /usr/bin/foo et /bin/foo, selon que ton $PATH soit /bin:/usr/bin ou /usr/bin:/bin, ce ne sera pas le même qui sera exécuté. En donnant le chemin complet, tu perds ce comportement (ça peut être voulu) et la probabilité.