J'ai un script qui doit créer des fichiers temporaires pour son travail et nettoyer après lui-même. Ma question concerne la recherche du bon répertoire de base pour les fichiers temporaires.
Le script doit fonctionner sur plusieurs plates-formes: Git Bash (Windows), Solaris, Linux, OSX. Sur chaque plate-forme, le répertoire temporaire préféré est exprimé différemment:
- Windows:
%TMP%
(et éventuellement%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: censé être
$TMPDIR
mais semble être non défini sur plusieurs systèmes, j'ai essayé
Donc, dans mon script, j'ai ajouté ce passe-partout:
if test -d "$TMPDIR"; then
:
elif test -d "$TMP"; then
TMPDIR=$TMP
elif test -d /var/tmp; then
TMPDIR=/var/tmp
else
TMPDIR=/tmp
fi
Cela semble trop fastidieux. Y a-t-il un meilleur moyen?
shell-script
directory
tmp
Arrêtez de nuire à Monica
la source
la source
${TMPDIR-/tmp}
sur les goûts Unix.TMPDIR
Existe-t-il (de la part du système ou de l'administrateur ou de l'utilisateur) de vous dire quand ne pas utiliser/tmp
les fichiers temporaires?Réponses:
Un moyen légèrement plus portable de gérer les fichiers temporaires consiste à utiliser
mktemp
. Cela créera des fichiers temporaires et vous renverra les chemins. Par exemple:Vous pouvez l'utiliser facilement dans un script:
En lisant la page de manuel, vous devriez pouvoir définir les options en fonction de vos besoins. Par exemple:
-d
crée un répertoire au lieu d'un fichier.-u
génère un nom, mais ne crée rien.En utilisant
-u
vous pourriez récupérer le répertoire temporaire assez facilement avec ...Plus d'informations sur
mktemp
sont disponibles ici .Modification concernant Mac OS X: Je n’ai jamais utilisé de système Mac OSX, mais selon un commentaire de Tyilo ci-dessous, il semble que celui-ci
mktemp
nécessite que vous fournissiez un modèle (qui est un argument optionnel sous Linux). Citant:La page de manuel indique également que cette implémentation est inspirée de la page de manuel OpenBSD
mktemp
. Une divergence similaire pourrait donc être observée par les utilisateurs OpenBSD et FreeBSD (voir la section Historique ).Maintenant, comme vous l'avez probablement remarqué, cela nécessite que vous spécifiiez un chemin d'accès complet au fichier, y compris le répertoire temporaire que vous recherchez dans votre question. Ce petit problème peut être traité à l'aide du
-t
commutateur. Bien que cette option semble nécessiter un argument (prefix
), il semblerait quemktemp
cela dépende$TMPDIR
lorsque cela est nécessaire.Globalement, vous devriez pouvoir obtenir le même résultat que ci-dessus en utilisant ...
Toute réaction des utilisateurs de Mac OS X serait grandement appréciée, car je suis incapable de tester cette solution moi-même.
la source
gitbash
une interface shell, d’où mon "légèrement". En fait, je serais incapable de dire où les fichiers temporaires sont stockés sur un système Windows ...c:\User\Name\..............\stuff
. Et il y en a probablement 100. Pourtant, certaines distributions Linux approchent du même niveau de folie en/var
. J'étais juste curieux. Cela m’a semblé étrange: c’est mon expérience qui fait que la frustration est très portable et que la commodité l’est moins. Très bonne réponse quand même.WINDOWS/Temp
ouWindows/Temp
comme répertoire par défaut pour ses fichiers temporaires; Ce répertoire existe également sur les machines Windows 7. Mais mon script permet à l'utilisateur de fournir un autre répertoire temporaire sur la ligne de commande.mktemp
.mktemp
ça fonctionne: simplemktemp
renvoie un fichier etmktemp -d
un répertoire; aucun modèle requis. Le manuel n'est pas mis à jour cependant.Si vous cherchez la même chose en moins de lignes ...
Vous pouvez écrire ceci dans un.
la source
Vous pourriez faire:
Le shell devrait soit trouver un répertoire exécutable dans l’une des 4 alternatives, soit quitter avec une erreur significative. Néanmoins, POSIX définit la
$TMPDIR
variable (pour les systèmes XCU) :Il faut aussi le
/tmp
chemin.la source