
Mientras desarrollaba alguna aplicación (aunque esto no es una pregunta de desarrollo), me preguntaba si el cd
comando utilizado en Windows es un comodín o una especie de comando multiplataforma. Busqué en la tabla con comandos para Unix/Linux y MAC OS X y resulta que parece estar allí. No soy usuario de multi-OS, por lo que pregunto si alguien con experiencia en diferentes SO puede decirme:
- Si este comando realmente existe y funciona
- Si tiene la misma funcionalidad (cambiar directorio)
- Si hay algún problema con su uso.
- Si en algún sistema operativo hay otro comando de línea de comandos que hace lo mismo de una manera mejor/más elaborada/más utilizada con frecuencia.
¡Gracias de antemano!
(PSI no estoy 100% seguro de si esta pregunta pertenece a este sitio o a algún otro sitio de intercambio de pila...)
(PPS ¡Se agradecerá cualquier ayuda para etiquetar esto!)
Respuesta1
Si este comando realmente existe y funciona
Um, sí, existe y funciona.
Si tiene la misma funcionalidad (cambiar directorio)
Sí; sí lo hace. Eso no quiere decir que alguien no pueda simplemente crear un programa (por ejemplo, cd.exe
) que haga otra cosa, pero generalmente es un comando integrado en el shell y cambia el directorio actual.
Si hay algún problema con su uso.
¿Qué tipo de problemas? Aparte de .
y ..
, su sintaxis es bastante sencilla. La única complicación es cuando se cambia el directorio actual en otros volúmenes (letras de unidad). Además, las extensiones de comando en Windows amplían ligeramente su uso, pero nada que pueda causar problemas reales.
Si en algún sistema operativo hay otro comando de línea de comandos que hace lo mismo de una manera mejor/más elaborada/más utilizada con frecuencia.
No precisamente. Puede haber otros comandos, pero cd
es agradable, breve y funciona. Además de cambiar la unidad actual además del directorio (por ejemplo, cd /d t:\blah
), ¿cómo se podría mejorar exactamente el cambio del directorio actual?
Esto no es del todo relacionado con el tema (aunque está relacionado), pero aparentemente algunas personas no pueden aceptar que el CD
comando notenerpara ser integrado en el caparazón. El hecho es que lo haceno; élpoderser un programa externo. Algunos sistemas operativos lo ponen fácil, otros lo dificultan y algunos pueden incluso hacerlo imposible, pero lo cierto es quepoderser externo y nosiempre tiene que estar integradocomo algunos quieren hacerte creer. Por ejemplo, en las versiones de 32 bits de Windows, incluidas XP y 7, puede aprovechar el hecho de que el subsistema de la consola (que es como se admiten y ejecutan los programas en modo texto en Windows) admite la antigua interrupción "DOS" 0x21: sí, incluso en cmd
, no solo en `command. (No funcionará en versiones de 64 bits de Windows porque perdieron mucha compatibilidad con versiones anteriores).
Por ejemplo, puede guardar el siguiente script de depuración c.scr
y compilarlo ejecutándolo debug < c.scr
desde la línea de comandos. Creará un .com
archivo que puede utilizar para cambiar el directorio actual.
a
mov si,82
mov dl,[si]
or dl,20
sub dl,61
mov ah,e
int 21
mov dl,[si]
cmp dl,d
jz 119
inc si
jmp 10f
xor dl,dl
mov [si],dl
mov dx,82
mov ah,3b
int 21
mov ah,4c
int 21
n c.com
rcx
28
w
q
(Tenga en cuenta que no admite nombres de archivos largos, por lo que deberá utilizar el8.3versión. También cambia la unidad actual, por lo que puede cambiar el directorio a otra unidad en un solo movimiento, pero lo hace de una manera muy simple y no realiza ninguna verificación de errores, por lo que intentar cambiar a un directorio que comienza con un La letra para la que existe una unidad no funcionará. Es decir, c c:\windows
funcionará como lo hará c \windows
, pero c asd
no lo hará si tiene una A:
unidad a menos que contenga un directorio llamado asd
. Puede ampliarlo y agregar verificación de errores y demás si lo desea, pero demuestra mi punto sobre la posibilidad de cd
ser externo en Windows).
También puede guardar el siguiente programa Pascal (por ejemplo, como c.pas
) y compilarlo con Turbo Pascal o la versión GO32 del compilador FreePascal (la versión de 32 bits no funcionará porque usa la API normal de Windows):
program cd;
begin
chdir(paramstr(1));
end.
Nuevamente, simplemente ejecútelo para cambiar el directorio actual (por ejemplo, `c.exe "c:\program files"; sí, los nombres de carpeta largos funcionarán, pero se convertirán automáticamente a nombres 8.3 al ejecutarse).
Respuesta2
La idea de un comando de cambio de cd
directorio se inventó como parte de Unix en 1969. Es conciso, como la mayoría de los otros comandos de Unix como ls
,, etc. También coincidía con el sistema de archivos con estructura de árbol inventado como parte de Unix, donde incluso los dispositivos tenían archivos en formato . Es fácil olvidar que antes de Unix, no había muchos sistemas operativos que tuvieran sistemas de archivos estructurados en árbol con directorios que los usuarios comunes pudieran crear fácilmente. Por lo general, simplemente tienes (en el mejor de los casos) un montón de archivos en alguna parte y extrañas utilidades de IBM como IEBGENER para manipularlos.rm
sed
/dev
Lo cd
que hace es cambiar el directorio actual del proceso actual, en este caso, el shell, lo que afecta cómo el sistema operativo interpretará los nombres de archivos relativos, es decir, aquellos que no están completamente calificados desde la raíz /
del sistema de archivos. El directorio actual se hereda del proceso padre al hijo.
Hay un par de grandes diferencias en la semántica de cd
los sistemas Unix o Linux frente a los sistemas Windows. Una es, ¿qué debería cd
hacer sin operando? En Unix o Linux, lo lleva al directorio de inicio. En Windows, cmd.exe
's cd
simplemente informa el directorio actual. Además, Windows no tiene raíz única, tiene letras de unidad y puede tener un directorio actual en cada una, aunque la implementación detrás de escena es que Microsoft arrojó eso por encima de la pared al espacio de la aplicación: cada proceso conlleva un entorno oculto. variables con nombres extraños como =C:
que la aplicación se encarga de mantener actualizada.
Algunos cd
comandos son mejores que otros, pero esto puede ser una cuestión de gustos. Elcaparazón Cintrodujo la idea de CDPATH
que funciona como PATH
lo hace la variable pero encuentra directorios en lugar de ejecutables. El shell C también introdujo pilas de directorios que le permiten acceder pushd
al popd
directorio actual. Escritomi propio shell CCopié todo eso, agregué una opción para permitir que el usuario decida qué cd
debe hacer sin operando y una característica que un cliente sugirió que si escribe más de 2 puntos, debería cd ....
subir n-1 niveles.
Respuesta3
Sí, cd
es un comando *nix que funciona en Linux, OSX y otros sistemas operativos *nix.
Respuesta4
El cd
comando en DOS y Windows es muy similar al de Unix/Linux, y con razón: todo el concepto de directorios fue copiado de Unix.
El primer sistema que ejecutó MS-DOS (con la marca PC-DOS) fue la IBM PC. No había disco duro: el almacenamiento se hacía en disquetes, que venían en capacidades de 180K y 360K. Con medios tan limitados, no era necesario un esquema complicado de nombres de archivos. Entonces, un nombre de archivo completo era solo un designador de unidad seguido de un8.3 nombre de archivocomo por ejemplo a:autoexec.bat
o b:advent.exe
.
MS-DOS 2.0 intentó solucionar muchos problemas como este copiando funciones de Unix. Esto incluía directorios y los comandos para tratar con ellos. Un problema era que MS-DOS ya estaba usando el carácter / para indicar argumentos opcionales; Esta es la razón por la que Windows y Unix utilizan diferentes caracteres separadores de ruta.
Una diferencia importante es que Unix tiene una jerarquía de directorios uniforme sin designadores de unidades. Al adaptar el cd
comando a MS-DOS, Microsoft tuvo que inventar una nueva semántica para la noción de "directorio actual" que tenga en cuenta el designador de unidad. Para maximizar la compatibilidad con versiones anteriores (para que nombres como a:something
sigan significando algo sensato), inventaron la noción de "unidad actual" y decretaron que cada unidad tenga su propio "directorio actual". Entonces, cuando cambias el "directorio actual", en realidad estás cambiando el directorio actual de la unidad actual. Por lo general, este tipo de detalles no es algo de lo que deba preocuparse. Pero sí explica por qué cuando estás encendido c:\somedir
y haces cd d:\otherdir
nada parece suceder. QuétieneLo que sucedió es que cambió el directorio actual de su d:
unidad sin cambiar su unidad actual; tienes que ingresar un d:
comando para que eso suceda.