Pregunta:
¿Por qué es esto?
Cuando hago esto
CD ~/Desktop
No me lleva al escritorio. Pero esto:
echo "foo
bar" | GREP bar
me da:
bar
Respuesta:
De sus otras preguntas, supongo que está usando OS X. El sistema de archivos HFS + predeterminado en OS X no distingue entre mayúsculas y minúsculas: no puede tener dos archivos llamados "abc" y "ABC" en el mismo directorio e intentar acceder cualquier nombre llegará al mismo archivo. Lo mismo puede suceder con Cygwin o con sistemas de archivos que no distinguen entre mayúsculas y minúsculas (como FAT32 o ciopfs ) en cualquier lugar.
Debido a que grep
es un ejecutable real, se busca en el sistema de archivos (en los directorios de PATH
). Cuando su shell busca grep
o GREP
en /usr/bin
, encontrará el ejecutable grep
.
Los elementos integrados de shell no se buscan en el sistema de archivos: debido a que están integrados, se accede a ellos mediante comparaciones de cadenas (que distinguen entre mayúsculas y minúsculas) dentro del propio shell.
Lo que te encuentras es un caso interesante. Mientras que cd
es un archivo incorporado, al que se accede con distinción entre mayúsculas y minúsculas, el CD
se encuentra como un ejecutable /usr/bin/cd
. El ejecutable de cd
es bastante inútil: debido a que cd
afecta el entorno de ejecución de shell actual, siempre se proporciona como un shell regular integrado , pero de todos modos hay un ejecutable de cd
por el bien de POSIX , que cambia de directorio por sí mismo y luego termina inmediatamente, dejando el caparazón circundante donde comenzó.
Puede probar estos con el type
incorporado :
$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD
type
le dice lo que hará el shell cuando ejecute ese comando. Cuando ejecuta cd
accede al archivo incorporado, pero el CD
encuentra el ejecutable. Para otras incorporaciones, la incorporada y el ejecutable serán razonablemente compatibles (prueba con echo
), pero para cd
eso no es posible.