Общий способ получить временный путь?

На более поздних версиях gnupg (проверено на 2.1.18) используйте:

gpg --fingerprint --with-keygrip

для получения keygrip, затем

echo "KEYINFO --no-ask Err Pmt Des" | gpg-connect-agent

чтобы увидеть, кэширован он или нет.

6
17.03.2017, 15:23
2 ответа

$ 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).

20
27.01.2020, 20:25

ПРИМЕЧАНИЕ. :Вопрос 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]вариант. (Однако в настоящее время я не могу проверить.)

2
28.10.2020, 19:10

Теги

Похожие вопросы