Трохи більш портативний спосіб обробки тимчасових файлів - це використання mktemp
. Він створить тимчасові файли та поверне їх шляхи для вас. Наприклад:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Ви можете використовувати його в сценарії досить легко:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Читаючи сторінку чоловіка, ви повинні мати можливість встановлювати параметри відповідно до своїх потреб. Наприклад:
-d
створює каталог замість файлу.
-u
генерує ім’я, але нічого не створює.
Використовуючи -u
ви можете отримати тимчасовий каталог досить легко за допомогою ...
$ tmpdir=$(dirname $(mktemp -u))
Більше інформації mktemp
можна отримати тут .
Редагування щодо Mac OS X: Я ніколи не використовував систему Mac OSX, але згідно з коментарем Тайло нижче, схоже, що для Mac OSX mktemp
потрібно надати вам шаблон (що є необов'язковим аргументом в Linux). Цитування:
Шаблоном може бути будь-яке ім'я файлу, наприклад, до нього додається деяка кількість "X" /tmp/temp.XXXX
. Кінцеві "X" замінюються поточним номером процесу та / або унікальною комбінацією літер. Кількість унікальних імен файлів, які може повернути mktemp, залежить від кількості наданих "Xs"; шість "X" призведе до того, що mktemp вибере 1 з 56800235584 (62 ** 6) можливих імен файлів.
На сторінці man також йдеться, що ця реалізація натхненна довідковою сторінкою OpenBSD mktemp
. Таким чином, подібні розбіжності можуть спостерігатися і у користувачів OpenBSD та FreeBSD (див. Розділ « Історія» ).
Тепер, як ви, напевно, помітили, для цього потрібно вказати повний шлях до файлу, включаючи тимчасовий каталог, який ви шукаєте у своєму запитанні. З цією малою проблемою можна впоратися за допомогою -t
перемикача. Незважаючи на те, що цей варіант, як видається, вимагає аргументу ( prefix
), але, здається, mktemp
покладається на $TMPDIR
необхідність.
Загалом, ви повинні мати можливість отримати той же результат, що і вище, використовуючи ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Будь-які відгуки користувачів Mac OS X були б вдячні, оскільки я не в змозі перевірити це рішення самостійно.
${TMPDIR-/tmp}
Unix-лайки.TMPDIR
є (система чи адміністратор чи користувач), щоб сказати вам, коли не використовувати/tmp
тимчасові файли.