На более поздних версиях gnupg (проверено на 2.1.18) используйте:
gpg --fingerprint --with-keygrip
для получения keygrip, затем
echo "KEYINFO --no-ask
чтобы увидеть, кэширован он или нет.
$ TMPDIR
более стандартен, чем $ TEMP
и $ TMP
, как это упоминается в POSIX стандарт.
Каталог
/ tmp
сохраняется в POSIX.1-2008 для размещения исторических приложений, предполагающих его доступность. Реализациям рекомендуется предоставлять подходящие имена каталогов в переменной средыTMPDIR
, а приложениям рекомендуется использовать содержимоеTMPDIR
для создания временных файлов.
Ссылка: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap10.html
По крайней мере, в macOS для $ TMPDIR
не задано значение / tmp
по умолчанию, но что-то вроде / var / folder / 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)
Приведенные выше команды создадут временный файл и каталог. (соответственно) в $ TMPDIR
или в / tmp
, если $ TMPDIR
пусто или если переменная не задана (эта переменная по умолчанию установлена в результат из getconf DARWIN_USER_TEMP_DIR
в macOS).
ПРИМЕЧАНИЕ. :Вопрос OP: «Общий способ получить временный путь?»; это не "Как создать временный файл/каталог?"
Man-страница 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]
вариант. (Однако в настоящее время я не могу проверить.)