2008-10-05 2 views
3

Я написал короткий сценарий bash для выполнения задачи, которая включает создание временного каталога и хранение в нем различных файлов и выполнение различных операций над ним.Где создавать временные файлы при доступе к/tmp/запрещается?

В моем первом проходе я только что создал временный каталог на /tmp/$$.$script ", но затем я протестировал скрипт на компьютере, где у меня не было доступа на запись к/tmp/я хотел бы учитывать этот случай.Так что мой вопрос в том, где хорошее вторичное место для этого временного каталога? Должен ли я просто использовать текущий каталог? Домашний каталог? ~/tmp /? Выходное местоположение скрипта?

Все созданные файлы, не очищаются на выходе скрипта.

ответ

7

Многие системы также имеют /var/tmp. Если системный администратор не хочет, чтобы вы писались до /tmp, предположительно, они предоставили некоторую альтернативу ... это набор переменных окружения $TMPDIR? Например, на моем Mac:

$ echo $TMPDIR 
/var/folders/jf/jfu4pjGtGGGkUuuq8HL7UE+++TI/-Tmp-/ 
+0

К сожалению, этот конкретный компьютер не имеет набора TMPDIR, но я думаю, что добавлю его для проверки как возможное место записи. Благодарю. –

1

Вы можете попробовать /var/tmp, хотя вполне вероятно, что /tmp является символической ссылкой на что (или наоборот).

+0

В этом конкретном случае у меня действительно есть доступ к/var/temp, так что это то, с чем я иду. Благодарю. –

5

Я хотел бы предложить ~/[ваше имя сценария]/TMP, если TMPDIR не установлен, вместо ~/TMP /, так как пользователь может быть создан, что сами по себе. (и вы можете не захотеть случайно переопределить все).

Подобно тому, как экспромтом мысль в Баш -

case $TMPDIR in '') tmp_dir=".${0}/tmp";; *) tmp_dir=$TMPDIR;; esac 
4

Используйте $ {TMPDIR: -/TMP} ($ TMPDIR или/TMP, если $ TMPDIR не установлена). Если это невозможно для записи, то выйдите с ошибкой, говоря об этом, или попросите пользователя ввести данные, определяющие его. Я думаю, что спрашивать пользователя, куда должны идти временные файлы, предпочтительнее предполагать где-то и оставить их там, если ваш процесс будет убит.

2

Вы можете попробовать использовать mktemp (предполагая, что он правильно настроен для системы)

например MYTMPDIR=$(mktemp -d)

Смежные вопросы