bash – ¿Por qué las funciones internas de Shell no se pueden ejecutar con letras mayúsculas, pero otros comandos sí?

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım