
일부 응용 프로그램을 개발하는 동안(개발 문제는 아니지만) cd
Windows에서 사용되는 명령이 일종의 와일드카드 또는 크로스 플랫폼 명령인지 궁금합니다. Unix/Linux 및 MAC OS X용 명령이 포함된 테이블을 찾아보니 거기에 있는 것 같습니다. 저는 다중 OS 사용자가 아니기 때문에 다른 OS에 대한 경험이 있는 사람이 다음과 같이 말해 줄 수 있는지 묻습니다.
- 이 명령이 실제로 존재하고 작동하는 경우
- 동일한 기능을 갖고 있는 경우(디렉터리 변경)
- 사용에 문제가 있는 경우
- 어떤 OS에든 더 나은/더 정교한/더 자주 사용되는 방식으로 동일한 작업을 수행하는 또 다른 명령줄 명령이 있는 경우.
미리 감사드립니다!
(PSI는 이 질문이 이 사이트에 속하는지 아니면 다른 Stackexchange 사이트에 속하는지 100% 확신하지 못합니다...)
(PPS 태그를 지정하는 데 도움을 주시면 감사하겠습니다!)
답변1
이 명령이 실제로 존재하고 작동하는 경우
음, 네, 존재하고 작동합니다.
동일한 기능을 갖고 있는 경우(디렉터리 변경)
예; 네, 그렇습니다. 누군가가 단순히 다른 작업을 수행하는 프로그램(예: )을 만들 수 없다는 의미는 아니지만 cd.exe
일반적으로 셸에 내장된 명령으로 현재 디렉터리를 변경합니다.
사용에 문제가 있는 경우
어떤 종류의 문제가 있나요? .
and 외에 ..
구문은 매우 간단합니다. 유일한 문제는 다른 볼륨(드라이브 문자)의 현재 디렉터리를 변경할 때입니다. 또한 Windows의 명령 확장은 사용법을 약간 확장하지만 실제 문제를 일으키는 것은 아닙니다.
어떤 OS에든 더 나은/더 정교한/더 자주 사용되는 방식으로 동일한 작업을 수행하는 또 다른 명령줄 명령이 있는 경우.
설마. 다른 명령이 있을 수 있지만 cd
훌륭하고 짧으며 트릭을 수행합니다. 디렉터리(예: ) 외에 현재 드라이브를 변경하는 것 외에 cd /d t:\blah
현재 디렉터리를 변경하는 것이 정확히 어떻게 개선될 수 있습니까?
이것은 주제와 관련이 없지만(비록 관련이 있지만) 분명히 일부 사람들은 명령이 CD
그렇지 않다는 사실을 받아들이지 못하는 것 같습니다.가지다쉘에 내장됩니다. 사실은 그러하다.~ 아니다; 그것~할 수 있다외부 프로그램이 되어야 합니다. 일부 운영 체제에서는 이를 쉽게 만들고 다른 운영 체제에서는 어렵게 만들고 일부 운영 체제에서는 불가능하게 만들 수도 있습니다.~할 수 있다외부에 있고 그렇지 않습니다.항상 내장되어 있어야 함어떤 사람들은 당신이 믿고 있는 것처럼요. 예를 들어 XP 및 7을 포함한 32비트 버전의 Windows에서는 콘솔 하위 시스템(텍스트 모드 프로그램이 Windows에서 지원되고 실행되는 방식)이 이전 "DOS" 인터럽트 0x21을 지원한다는 사실을 활용할 수 있습니다. 예, 에서도 cmd
단지 `command.'가 아닙니다. (64비트 버전의 Windows에서는 이전 버전과의 호환성이 많이 떨어지기 때문에 작동하지 않습니다.)
예를 들어 아래 디버그 스크립트를 로 저장 하고 명령줄에서 c.scr
실행하여 컴파일 할 수 있습니다. 현재 디렉터리를 변경하는 데 사용할 수 있는 파일이 debug < c.scr
생성됩니다 ..com
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
(참고로 긴 파일 이름은 지원하지 않으므로8.3버전. 현재 드라이브도 변경하므로 한 번에 디렉터리를 다른 드라이브로 변경할 수 있지만 매우 간단한 방식으로 수행되며 오류 검사를 수행하지 않으므로 다음으로 시작하는 디렉터리로 변경하려고 합니다. 드라이브가 존재하는 문자는 작동하지 않습니다. 즉, c c:\windows
은(는) 대로 작동 c \windows
하지만 드라이브에 이름이 지정된 디렉토리가 포함되지 않는 한 드라이브가 c asd
있으면 작동하지 않습니다 . 원하는 경우 이를 확장하고 오류 검사 등을 추가할 수 있지만 이는 Windows에서 외부에 있을 가능성에 대한 내 요점을 입증합니다 .)A:
asd
cd
다음 Pascal 프로그램(예: c.pas
)을 저장하고 Turbo Pascal 또는 FreePascal 컴파일러의 GO32 버전으로 컴파일할 수도 있습니다(32비트 버전은 일반 Windows API를 사용하기 때문에 작동하지 않습니다).
program cd;
begin
chdir(paramstr(1));
end.
다시 한번 실행하여 현재 디렉토리를 변경하십시오(예: `c.exe "c:\program files" - 예, 긴 폴더 이름은 작동하지만 실행 시 자동으로 8.3 이름으로 변환됩니다).
답변2
디렉터리 변경 명령 의 아이디어는 1969년 Unix의 일부로 고안되었습니다. , 등과 같은 cd
대부분의 다른 Unix 명령과 마찬가지로 간결합니다 . 또한 장치도 . Unix 이전에는 일반 사용자가 쉽게 만들 수 있는 디렉터리가 있는 트리 구조의 파일 시스템을 갖춘 OS가 많지 않았다는 사실을 잊기 쉽습니다. 일반적으로 기껏해야 어딘가에 파일 더미가 있고 이를 조작할 IEBGENER와 같은 이상한 IBM 유틸리티가 있습니다.ls
rm
sed
/dev
현재 프로세스(이 경우 쉘)의 현재 디렉토리를 변경하는 것은 운영 체제가 상대 파일 이름, 즉 파일 시스템의 cd
루트에서 정규화되지 않은 파일 이름을 해석하는 방법에 영향을 줍니다 . /
현재 디렉터리는 상위 프로세스에서 하위 프로세스로 상속됩니다.
cd
Unix 또는 Linux 시스템과 Windows 시스템 의 의미 체계에는 몇 가지 큰 차이점이 있습니다 . 하나는 cd
피연산자가 없으면 무엇을 해야 하는가입니다. Unix 또는 Linux에서는 홈 디렉터리로 이동합니다. Windows에서 cmd.exe
는 cd
단순히 현재 디렉토리를 보고합니다. 또한 Windows는 단일 루트가 아니며 드라이브 문자가 있으며 각각에 현재 디렉터리를 가질 수 있습니다. 하지만 배후 구현은 Microsoft가 이를 벽 너머 응용 프로그램 공간에 던졌다는 것입니다. 각 프로세스는 일부 숨겨진 환경을 전달합니다. =C:
응용 프로그램과 같은 이상한 이름을 가진 변수는 최신 상태를 유지하는 역할을 합니다.
일부 cd
명령은 다른 명령보다 우수하지만 이는 취향의 문제일 수 있습니다. 그만큼C 쉘CDPATH
변수 처럼 작동 PATH
하지만 실행 파일 대신 디렉터리를 찾는다는 아이디어가 도입되었습니다 . C 셸에는 현재 디렉터리를 pushd
탐색 할 수 있는 디렉터리 스택도 도입되었습니다. popd
서면으로내 C 쉘나는 그 모든 것을 복사하고, 피연산자 없이 무엇을 해야 하는지 사용자가 결정할 수 있는 옵션 cd
과 2개 이상의 점을 입력하면 cd ....
n-1 레벨로 올라가야 한다고 고객이 제안한 기능을 추가했습니다.
답변3
예, cd
Linux, OSX 및 기타 *nix OS에서 작동하는 *nix 명령입니다.
답변4
DOS와 Windows의 명령 은 cd
Unix/Linux의 명령과 매우 유사하며, 그 이유는 디렉토리의 전체 개념이 Unix에서 복사되었기 때문입니다.
MS-DOS(PC-DOS 브랜드)를 실행한 최초의 시스템은 IBM PC였습니다. 하드 디스크가 없었습니다. 저장 공간은 180K와 360K 용량의 플로피에 있었습니다. 이렇게 제한된 미디어를 사용하면 복잡한 파일 이름 지정 체계가 필요하지 않았습니다. 따라서 정규화된 파일 이름은 단지 드라이브 지정자 뒤에8.3 파일명또는 .a:autoexec.bat
b:advent.exe
MS-DOS 2.0은 Unix의 기능을 복사하여 이와 같은 많은 문제를 처리하려고 시도했습니다. 여기에는 디렉토리와 이를 처리하기 위한 명령이 포함되었습니다. 한 가지 문제는 MS-DOS가 이미 / 문자를 사용하여 선택적 인수를 표시하고 있다는 것입니다. 이것이 Windows와 Unix가 서로 다른 경로 구분 문자를 사용하는 이유입니다.
한 가지 중요한 차이점은 Unix에는 드라이브 지정자가 없는 균일한 디렉터리 계층 구조가 있다는 것입니다. 명령을 MS-DOS에 적용하면서 cd
Microsoft는 드라이브 지정자를 고려하는 "현재 디렉터리" 개념에 대한 새로운 의미를 고안해야 했습니다. 이전 버전과의 호환성을 최대화하기 위해(예: 같은 이름이 a:something
여전히 합리적인 의미를 갖도록) "현재 드라이브"라는 개념을 고안하고 각 드라이브에 고유한 "현재 디렉터리"가 있음을 선언했습니다. 따라서 "현재 디렉터리"를 변경하면 실제로 현재 드라이브의 현재 디렉터리가 변경됩니다. 일반적으로 이런 종류의 세부 사항은 걱정할 필요가 없습니다. 그러나 그것은 당신이 켜져 c:\somedir
있고 cd d:\otherdir
아무 일도 일어나지 않는 것처럼 보이는 이유를 설명합니다. 무엇가지다d:
현재 드라이브를 변경하지 않고 드라이브 의 현재 디렉터리를 변경한 경우가 발생했습니다 . d:
이를 위해서는 명령을 입력해야 합니다 .