Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question shell, bash vs tcsh

14 réponses
Avatar
Nina Popravka
Pourquoi cette commande :
. ./vars
passe en bash et pas en tcsh ?
(évidemment je suis positionnée dans le bon répertoire, et vars s'y
trouve)
Et question subsidiaire : c'est quoi le premier point ?
--
Nina

4 réponses

1 2
Avatar
laurent.pertois
Erwan David wrote:

Surement un traitement différent du files System %£%*¨ case
insensitive...


Ou la config par défaut de chacun des deux shell qui prend ou non en
compte cette sensibilité.

--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.

Avatar
Vincent Lefevre
Dans l'article ,
Nina Popravka écrit:

On Sat, 10 Feb 2007 22:35:16 +0100, Erwan David
wrote:

Les commandes sont des fichiers. bash doit chercher le fichier avec le
nom que tu lui as demandé. Comme HFS+ est case insensitive quelle que
soit la casse que tu as utilisé il va le trouver. tcsh lui doit
vérifier que le fichier truvé a bien le bon nom (avec la bonne casse).


Ok, merci à tous les deux.
Mèzalors pourquoi ça ne s'applique pas aux noms de répertoires ? Parce
que là, tous les deux s'en foutent.


Parce qu'ils sont probablement gérés différemment. Je suppose que tcsh
a le comportement suivant ou quelque chose similaire:

1. Il regarde s'il a la commande dans sa table de hachage. Comme tcsh
ne sait pas a priori que le système de fichiers est insensible à
la casse, cette recherche est sensible à la casse.

2. S'il a trouvé la commande, il l'exécute.

3. Sinon il reconstruit sa table de hachage, et repasse en 1, mais
avec une erreur s'il ne trouve rien.

Ceci est confirmé par:

prunille:~> tcsh
[prunille:~] vinc17% foo
tcsh: foo: Command not found.
[prunille:~] vinc17% echo $PATH
/Users/vinc17/bin:/usr/local/bin:/opt/local/bin:/usr/bin:/bin:/opt/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin:.
[prunille:~] vinc17% cat > foo
echo foo
[prunille:~] vinc17% chmod 755 foo
[prunille:~] vinc17% foo
foo
[prunille:~] vinc17% cat > bin/foo
echo bin/foo
[prunille:~] vinc17% chmod 755 bin/foo
[prunille:~] vinc17% foo
foo
[prunille:~] vinc17% rehash
[prunille:~] vinc17% foo
bin/foo
[prunille:~] vinc17%

Cependant bash a le même problème. Et s'il y a 2 exécutables ./foo
et bin/Foo, alors la commande foo va exécuter ./foo tandis que la
commande Foo va exécuter bin/Foo (la casse va être ignorée seulement
si la commande avec la bonne casse n'est pas trouvée, ce qui n'est
pas très cohérent):

prunille:~> sh
sh-2.05b$ cat > foo
echo foo
sh-2.05b$ chmod 755 foo
sh-2.05b$ foo
foo
sh-2.05b$ cat > bin/Foo
echo bin/foo
sh-2.05b$ chmod 755 bin/Foo
sh-2.05b$ Foo
bin/foo
sh-2.05b$ foo
foo
sh-2.05b$ rm foo
sh-2.05b$ foo
bin/foo
sh-2.05b$

Quant à zsh, il va toujours exécuter bin/Foo, i.e. il va toujours
ignorer la casse et exécuter la première commande située dans le
$PATH, ce qui est AMHA le comportement attendu (et même pas besoin
d'un rehash):

prunille:~> zsh -f
prunille% cat > foo
echo foo
prunille% chmod 755 foo
prunille% foo
foo
prunille% cat > bin/Foo
echo bin/foo
prunille% chmod 755 bin/Foo
prunille% foo
bin/foo
prunille%

On voit que zsh trouve immédiatement la bonne commande, même si la
casse est différente. Bref, zsh est un shell supérieur. :)

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


Avatar
Nina Popravka
On Sun, 11 Feb 2007 03:47:00 +0000 (UTC), Vincent Lefevre
<vincent+ wrote:

la casse va être ignorée seulement
si la commande avec la bonne casse n'est pas trouvée, ce qui n'est
pas très cohérent):
Et source d'erreurs potentielles pour quelqu'un qui comme moi n'a pas

l'habitude d'un truc case sensitive. C'est pour ça que ça m'a tiré
l'oeil. C'est assez couillon, comme comportement.
--
Nina

Avatar
Vincent Lefevre
Dans l'article ,
Nina Popravka écrit:

On Sun, 11 Feb 2007 03:47:00 +0000 (UTC), Vincent Lefevre
<vincent+ wrote:

la casse va être ignorée seulement
si la commande avec la bonne casse n'est pas trouvée, ce qui n'est
pas très cohérent):
Et source d'erreurs potentielles pour quelqu'un qui comme moi n'a pas

l'habitude d'un truc case sensitive. C'est pour ça que ça m'a tiré
l'oeil. C'est assez couillon, comme comportement.


C'est plutôt l'incohérence qui est source d'erreurs. Il faut que le
système de fichiers soit traité de manière complètement "insensible
à la casse" ou complètement "sensible à la casse". Quelque chose
d'intermédiaire, c'est une mauvaise idée, et AMHA un bug.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


1 2