Нахождение корректного tmp dir на нескольких платформах

В соответствии с этой статьей следующая команда покажет соединения с процессами, содержащими "командную строку VNC":

# sudo netstat -p | grep 

Обновление

Обратите внимание на то, что netstat команда должна работать как root

46
30.04.2017, 14:54
3 ответа

Несколько больше портативный способ обрабатывать временные файлы - использовать MKTEMP . Это создаст временные файлы и вернуть их пути для вас. Например:

$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P

Вы можете легко использовать его в сценарии:

tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile

Чтение страницы человека, вы должны быть в состоянии установить параметры в соответствии с вашими потребностями. Например:

  • -D создает каталог вместо файла.
  • -U генерирует имя, но ничего не создает.

Использование -U -U Вы можете легко получить временный каталог с ...

$ tmpdir=$(dirname $(mktemp -u))

Больше информации о MKTEMP доступно здесь .

Править в отношении Mac OS X: Я никогда не использовал систему Mac OSX, но в соответствии с комментарием Tyilo ниже кажется, что Mac OSX MKTEMP требует, чтобы вы предоставили Шаблон (который является необязательным аргументом на Linux). Цитирование:

Шаблон может быть любое имя файла с некотором количества «XS», добавленных к нему, например /tmp/temp.xxxx . Трейлинг «XS» заменяется текущим номером процесса и / или уникальной комбинации буквы. Количество уникальных имен файлов MKTEMP может вернуться, зависит от количества предоставленного «XS»; Шесть «XS» приведет к выбору MKTEMP 1 из 56800235584 (62 ** 6) возможных имен файлов.

Страница человека также говорит, что эта реализация вдохновлена ​​страницей человека OpenBSD для MKTEMP . Поэтому аналогичное расхождение может наблюдаться также пользователи OpenBSD и FreeBSD (см. Историю .

Теперь, как вы, вероятно, заметили, это требует от вас указать полный путь к файлу, включая временный каталог, который вы ищете в своем вопросе. Эта небольшая проблема может быть обработана с использованием коммутатора -T . Хотя эта опция, кажется, требует аргумента ( префикс ), появилось бы, что MKTEMP полагается на $ TMPDIR при необходимости.

Все вообще, вы сможете получить тот же результат, что и выше, используя ...

$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))

Любая обратная связь с Mac OS X Пользователям было бы очень оценено, так как я не могу проверить это решение самостоятельно.

72
27.01.2020, 19:34

Если вы ищете одно и то же в меньшем количестве строк...

for TMPDIR in "$TMPDIR" "$TMP" /var/tmp /tmp
do
    test -d "$TMPDIR" && break
done

Вы можете написать это в одной.

10
27.01.2020, 19:34

Использование gvim исправляет проблему < S-CR > , но другие сопоставления все еще не работают, например , ev (см. в комментариях).

-121--244616-

Можно использовать команду chsh:

~# chsh myuser

Введите новые сведения о оболочке по запросу:

Login Shell [/bin/sh]: /bin/nologin

Или более короткая версия:

~# chsh myuser -s /bin/nologin
-121--7231-

Возможно:

: "${TMPDIR:=${TMP:-$(CDPATH=/var:/; cd -P tmp)}}"
cd -- "${TMPDIR:?NO TEMP DIRECTORY FOUND!}" || exit

Оболочка должна либо найти исполняемый каталог в одной из 4 альтернатив, либо выйти со значимой ошибкой. Тем не менее, POSIX определяет $ TMPDIR переменную (для систем XCU) :

TMPDIR Эта переменная должна представлять путь к каталогу, созданному доступно для программ, которым необходимо место для создания временных файлов.

Также требуется путь /tmp .

6
27.01.2020, 19:34

Теги

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