임시 경로를 얻는 일반적인 방법은 무엇입니까?

임시 경로를 얻는 일반적인 방법은 무엇입니까?

$TEMP및 에 대해 들어본 적이 있지만 $TMP모든 배포판의 표준은 아니라고 생각합니다.

내가 아는 한 임시 디렉토리를 얻는 가장 좋은 방법은 입니다 /tmp. 해당 경로에서 작동하지 않는 배포판이 있습니까?

답변1

$TMPDIRPOSIX 표준에서 언급했듯이 둘 다보다 더 표준적입니다 $TEMP.$TMP

/tmp디렉토리는 가용성을 가정하여 과거 애플리케이션을 수용하기 위해 POSIX.1-2008에서 유지됩니다. 구현 시 환경 변수에 적절한 디렉터리 이름을 제공하는 것이 권장되며, TMPDIR애플리케이션에서는 해당 내용을 사용하여 TMPDIR임시 파일을 생성하는 것이 권장됩니다.

인용하다:http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap10.html

적어도 macOS에서는 기본적으로 로 $TMPDIR설정되어 있지 않지만 (어떤 이유로든) /tmp여전히 심볼릭 링크로 사용할 수 있습니다 /var/folders/4r/504v61kx02gczk_454db345c0000gn/T/./tmp/private/tmp

tmpdir="${TMPDIR:-/tmp}"$TMPDIR예를 들어, 설정 여부에 관계없이 /tmp(또는 비어 있음) 스크립트에서 이를 사용할 수 있습니다 .

비표준 mktemp유틸리티는 기본적으로 파일이나 디렉터리를 생성 $TMPDIR하고 해당 이름을 출력합니다(그러나 macOS에서는 해당되지 않음, 아래 참조).

tmpfile=$(mktemp)
tmpdir=$(mktemp -d)

mktemp사용 방법을 알아보려면 시스템 설명서를 확인하세요 . 모든 구현이 동일한 것은 아닙니다.


macOS에서는이유 때문에mktemp, 유틸리티에 대한 명시적 경로가 포함된 템플릿을 제공 해야 합니다 .

tmpfile=$(mktemp "${TMPDIR:-/tmp}"/tmp.XXXXXXXX)
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}"/tmp.XXXXXXXX)

위 명령은 (각각) 비어 있거나 변수가 설정되지 않은 경우( 그 결과 변수는 macOS에서 기본적으로 설정됨) $TMPDIR에 임시 파일과 디렉터리를 생성 합니다./tmp$TMPDIRgetconf DARWIN_USER_TEMP_DIR


Cygwin에서는 $TMPDIR기본적으로 설정되지 않습니다.

$ echo $TMPDIR


$ echo $TEMP
/tmp

$ echo $TMP
/tmp

대신 사용해 보세요 ${TMPDIR:-${TEMP:-${TMP:-/tmp}}}.

답변2

참고: 운영자의 질문은 "임시 경로를 얻는 일반적인 방법은 무엇입니까?"입니다. "임시 파일/디렉토리를 만드는 방법은 무엇입니까?"입니다.

Linux 매뉴얼 페이지에는 mktemp다음 옵션이 포함되어 있습니다.

mktemp [OPTION]... [TEMPLATE] 
...
-u, --dry-run
    do not create anything; merely print a name
... 
--tmpdir[=DIR]
    interpret TEMPLATE relative to DIR. If DIR is not specified, 
use $TMPDIR if set, else /tmp. With this option, TEMPLATE must 
not be an absolute name. Unlike with -t, TEMPLATE may contain 
slashes, but mktemp creates only the final component. 

따라서 다음 방법 중 하나가 동일하며 작동합니다.

dirname $(mktemp -u --tmpdir)

또는

echo ${TMPDIR:-/tmp}

아마도 전자는 작동할 수 있지만 후자는 옵션 아래에 다른 설명이 있지만 사양 을 사용하거나 사용하지 않지만 구현하는 시스템에서는 작동하지 않을 것 입니다 TMPDIR. (하지만 지금은 테스트할 수 없습니다.)/tmpmktemp--tmpdir[=DIR]

답변3

가능한 모든 설정에 대해 환경을 확인하여 보다 포괄적인 접근 방식을 취하는 것이 좋습니다. 또한 .XDG 기본 디렉터리 사양을 확인하는 것도 잊지 마세요 XDG_RUNTIME_DIR.

https://specations.freedesktop.org/basedir-spec/basedir-spec-latest.html

echo ${XDG_RUNTIME_DIR:-${TMPDIR:-${TMP:-${TEMP:-/tmp}}}}

/run/user/1000XDG 기본 디렉토리를 따르는 시스템의 경우 이것이 반환될 가능성이 높으며 그렇지 않은 경우 , 순서 대로 확인됩니다 TMPDIR. 아무것도 설정되어 있지 않으면 반환됩니다 .TMPTEMP/tmp

관련 정보