왜 TMP와 TEMP 환경 변수가 모두 있나요? (2015)
Source: Hacker News
History
CP/M (1973)
원래의 마이크로컴퓨터 운영체제인 CP/M에는 환경 변수가 없었습니다. 따라서 TMP도 TEMP도 존재하지 않았습니다. 임시 파일 위치가 필요한 프로그램은 실행 파일 안의 바이트를 패치해 드라이브 문자를 지정하는 등 프로그램 자체 설정에 의존해야 했습니다.
MS‑DOS (1981)
8086 프로세서와 MS‑DOS가 등장하면서 설계는 CP/M에 크게 영감을 받았습니다. CP/M 호환성을 넘어서 MS‑DOS가 처음 추가한 것 중 하나가 환경 변수였습니다. 초기 MS‑DOS 프로그램들은 CP/M 소프트웨어의 포트였기 때문에 이러한 변수를 무시했습니다.
네이티브 MS‑DOS 애플리케이션이 등장하면서 개발자들은 설정에 환경 변수를 사용하기 시작했습니다. TEMP와 TMP 두 변수가 임시 파일 디렉터리를 나타내는 사실상의 표준이 되었습니다.
MS‑DOS 2.0은 파이프 기능을 도입했으며, MS‑DOS는 첫 번째 프로그램의 출력을 임시 파일에 기록한 뒤 그 파일을 두 번째 프로그램에 전달하는 방식으로 파이프를 시뮬레이션했습니다. 이때 OS는 TEMP 변수를 사용해 임시 파일을 생성할 위치를 결정했습니다.
프로그램마다 선호하는 변수가 달랐습니다:
DISKCOPY와EDIT는 먼저TEMP를 찾고, 없으면TMP를 사용했습니다.- Windows API 함수 **
GetTempFileName**은TMP를 먼저 확인하고, 그 다음에TEMP를 확인합니다.
Windows
Windows는 이중 변수 상황을 그대로 이어받았습니다. GetTempFileName의 원 작성자는 TMP를 선호했기 때문에, 이 API를 사용하는 대부분의 Windows 프로그램은 명시적으로 TEMP를 확인하지 않는 한 TMP에 지정된 디렉터리를 사용합니다.
Windows에서 Environment Variables 대화 상자를 열면 TMP와 TEMP가 모두 표시되며, 각각 서로 다른 위치를 가리킬 수 있습니다. 실제로 사용되는 변수는 프로그램 구현에 따라 달라집니다.
Practical Takeaway
- 임시 파일에 사용되는 디렉터리는 프로그램마다 다릅니다.
- 대부분의 Windows 애플리케이션에서 일관된 동작을 원한다면
TMP와TEMP가 동일한 폴더를 가리키도록 설정하십시오. - 레거시 MS‑DOS 유틸리티의 경우
TEMP가 선호되는 변수일 수 있습니다.