Vérifiez si alias GREPou which GREPsortez quelque chose.
Chepner
1
Voilà. Vous avez une commande nommée GREP, qui est distincte de grep. (Certes, il peut s'agir simplement d'un lien /usr/bin/grep
physique
12
Attendez: vous êtes sur Mac OS X, n'est-ce pas? HFS + préserve la casse par défaut, ce qui signifie que si la casse est importante lorsque vous créez un fichier, mais une fois que le fichier existe, les recherches ne tiennent pas compte de la casse. C'est-à-dire que vous bashpouvez demander un fichier nommé GREP, mais le système de fichiers considère grepune correspondance.
Chepner
1
Oui, car c'est Unix.
DisplayName
4
Les systèmes de fichiers sont indépendants du système d'exploitation. Vous pouvez utiliser d'autres systèmes de fichiers avec Mac OS X et (en théorie) utiliser HFS + avec d'autres systèmes d'exploitation. En outre, vous pouvez rendre HFS + sensible à la casse; le comportement préservant la casse n'est que le comportement par défaut pour des raisons historiques.
Chepner
Réponses:
71
D'après vos autres questions, vous utilisez OS X. Le système de fichiers HFS + par défaut sur OS X ne tient pas compte de la casse: vous ne pouvez pas avoir deux fichiers nommés "abc" et "ABC" dans le même répertoire et essayez d'accéder au même répertoire. l'un ou l'autre nom ira au même fichier. La même chose peut arriver sous Cygwin ou avec des systèmes de fichiers insensibles à la casse (comme FAT32 ou ciopfs ) n’importe où.
Parce que grepest un vrai exécutable, il est recherché sur le système de fichiers (dans les répertoires de PATH). Lorsque votre shell cherche l’ /usr/binun grepou l’ autre, GREPil trouvera l’ grepexécutable.
Les éléments intégrés au shell ne sont pas examinés sur le système de fichiers: comme ils sont intégrés, ils sont accessibles via des comparaisons de chaînes (sensibles à la casse) dans le shell même.
Ce que vous rencontrez est un cas intéressant. While cdest intégré, accessible en respectant les majuscules et les minuscules, CDen tant qu’exécutable /usr/bin/cd. L' cdexécutable est plutôt inutile: étant donné qu'il cdaffecte l'environnement d'exécution actuel du shell, il est toujours fourni en tant que shell standard , mais il existe néanmoins un cdexécutable pour POSIX , qui change de répertoire pour lui-même et se termine immédiatement, laissant le shell environnant. où cela a commencé.
Vous pouvez les essayer avec le programme typeintégré :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
typevous indique ce que le shell fera lorsque vous exécuterez cette commande. Lorsque vous exécutez, cdvous accédez à la commande intégrée, mais vous trouvez CDle fichier exécutable. Pour les autres fonctions intégrées, celles-ci et l'exécutable seront raisonnablement compatibles (essayez echo), mais cdcela n'est pas possible.
bonne réponse. J'étais sur le point de dire cygwin, ce qui aurait le même effet.
Josué
@ Josué Le problème du PO est résolu, mais je pense que pour les lecteurs ultérieurs de la question, une réponse basée sur cygwin serait au moins aussi utile que la réponse existante; Peut-être pourriez-vous en faire une réponse distincte, même si elle est brève, et vous reporter à la réponse existante pour plus de détails?
Volker Siegel
1
Pourquoi posix nécessiterait-il une commande inutile comme cd, et pourquoi le cd interne d'osx n'est-il pas admissible?
John
2
51 votes positifs! J'aurais juste dû poster une réponse, au lieu d'un commentaire :)
chepner
1
/ usr / bin / cd a un but. la syntaxe est la suivante: / usr / bin / cd arguments du programme de répertoire
alias GREP
ouwhich GREP
sortez quelque chose.GREP
, qui est distincte degrep
. (Certes, il peut s'agir simplement d'un lien/usr/bin/grep
bash
pouvez demander un fichier nomméGREP
, mais le système de fichiers considèregrep
une correspondance.Réponses:
D'après vos autres questions, vous utilisez OS X. Le système de fichiers HFS + par défaut sur OS X ne tient pas compte de la casse: vous ne pouvez pas avoir deux fichiers nommés "abc" et "ABC" dans le même répertoire et essayez d'accéder au même répertoire. l'un ou l'autre nom ira au même fichier. La même chose peut arriver sous Cygwin ou avec des systèmes de fichiers insensibles à la casse (comme FAT32 ou ciopfs ) n’importe où.
Parce que
grep
est un vrai exécutable, il est recherché sur le système de fichiers (dans les répertoires dePATH
). Lorsque votre shell cherche l’/usr/bin
ungrep
ou l’ autre,GREP
il trouvera l’grep
exécutable.Les éléments intégrés au shell ne sont pas examinés sur le système de fichiers: comme ils sont intégrés, ils sont accessibles via des comparaisons de chaînes (sensibles à la casse) dans le shell même.
Ce que vous rencontrez est un cas intéressant. While
cd
est intégré, accessible en respectant les majuscules et les minuscules,CD
en tant qu’exécutable/usr/bin/cd
. L'cd
exécutable est plutôt inutile: étant donné qu'ilcd
affecte l'environnement d'exécution actuel du shell, il est toujours fourni en tant que shell standard , mais il existe néanmoins uncd
exécutable pour POSIX , qui change de répertoire pour lui-même et se termine immédiatement, laissant le shell environnant. où cela a commencé.Vous pouvez les essayer avec le programme
type
intégré :type
vous indique ce que le shell fera lorsque vous exécuterez cette commande. Lorsque vous exécutez,cd
vous accédez à la commande intégrée, mais vous trouvezCD
le fichier exécutable. Pour les autres fonctions intégrées, celles-ci et l'exécutable seront raisonnablement compatibles (essayezecho
), maiscd
cela n'est pas possible.la source