2008-10-05 7 views
3

J'ai écrit un court script bash pour terminer une tâche qui implique la création d'un répertoire temporaire et le stockage de divers fichiers et l'exécution de diverses opérations sur celui-ci.Où créer des fichiers temporaires lorsque l'accès à/tmp/est refusé?

Lors de mon premier passage, j'ai simplement créé le dossier temp sous /tmp/$$.$script ", mais j'ai ensuite testé le script sur un ordinateur où je n'avais pas accès en écriture à/tmp /, et je J'aimerais prendre en compte ce cas, donc ma question est: où est un bon emplacement secondaire pour ce répertoire temp? Dois-je utiliser le répertoire courant? Le répertoire personnel? ~/tmp /? L'emplacement de sortie du script?

Tous les fichiers créés ne soient nettoyés à la sortie du script.

Répondre

7

De nombreux systèmes ont également un /var/tmp. Si le sysadmin ne veut pas que vous écrivez à /tmp, ils ont probablement fourni une alternative ... est la variable d'environnement $TMPDIR? Par exemple, sur mon Mac:

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

Malheureusement, cet ordinateur particulier n'a pas TMPDIR ensemble, mais je pense que je vais ajouter une vérification pour cela comme un emplacement d'écriture possible. Merci. –

1

Vous pouvez essayer /var/tmp, même si il est probable que /tmp est un lien symbolique à celui (ou vice-versa).

+0

Dans ce cas particulier, j'ai effectivement accès à/var/temp, donc c'est ce que je vais faire. Merci. –

5

Je suggère ~/[votre nom du script]/tmp, si TMPDIR n'est pas réglé, au lieu de ~/tmp/depuis l'utilisateur peut avoir créé que sur eux-mêmes. (et vous ne voudrez peut-être pas déranger accidentellement les choses là-dedans).

Tout comme un brassard au large de la pensée dans bash -

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

Utilisez $ {TMPDIR: -/tmp} ($ TMPDIR ou/tmp si $ TMPDIR est pas défini). Si ce n'est pas inscriptible, quittez-le avec une erreur, ou demandez à l'utilisateur de le définir. Je pense qu'il est préférable de demander à l'utilisateur où les fichiers temporaires doivent aller, de supposer quelque part et de les laisser là si votre processus est tué.

2

Vous pouvez essayer d'utiliser mktemp (en supposant qu'il est correctement configuré pour le système)

par exemple MYTMPDIR=$(mktemp -d)

Questions connexes