$TEMP
및 에 대해 들어본 적이 있지만 $TMP
모든 배포판의 표준은 아니라고 생각합니다.
내가 아는 한 임시 디렉토리를 얻는 가장 좋은 방법은 입니다 /tmp
. 해당 경로에서 작동하지 않는 배포판이 있습니까?
답변1
$TMPDIR
POSIX 표준에서 언급했듯이 둘 다보다 더 표준적입니다 $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
$TMPDIR
getconf 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
. (하지만 지금은 테스트할 수 없습니다.)/tmp
mktemp
--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/1000
XDG 기본 디렉토리를 따르는 시스템의 경우 이것이 반환될 가능성이 높으며 그렇지 않은 경우 , 순서 대로 확인됩니다 TMPDIR
. 아무것도 설정되어 있지 않으면 반환됩니다 .TMP
TEMP
/tmp