Cara yang sedikit lebih portabel untuk menangani file sementara adalah dengan menggunakan mktemp
. Ini akan membuat file sementara dan mengembalikan jalurnya untuk Anda. Misalnya:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Anda dapat menggunakannya dalam skrip dengan mudah:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Membaca halaman manual, Anda harus dapat mengatur opsi sesuai dengan kebutuhan Anda. Misalnya:
-d
membuat direktori alih-alih file.
-u
menghasilkan nama, tetapi tidak membuat apa pun.
Menggunakan -u
Anda dapat mengambil direktori sementara dengan cukup mudah dengan ...
$ tmpdir=$(dirname $(mktemp -u))
Informasi lebih lanjut mktemp
tersedia di sini .
Edit mengenai Mac OS X: Saya belum pernah menggunakan sistem Mac OSX, tetapi menurut komentar oleh Tyilo di bawah ini, sepertinya Mac OSX mktemp
mengharuskan Anda untuk menyediakan templat (yang merupakan argumen opsional di Linux). Mengutip:
Templat dapat berupa nama file apa pun dengan sejumlah "X" yang ditambahkan, misalnya /tmp/temp.XXXX
. "Xs" yang tertinggal diganti dengan nomor proses saat ini dan / atau kombinasi huruf yang unik. Jumlah nama file unik yang dapat dikembalikan mktemp tergantung pada jumlah "Xs" yang disediakan; enam "Xs" akan menghasilkan mktemp memilih 1 dari 56800235584 (62 ** 6) kemungkinan nama file.
Halaman manual juga mengatakan bahwa implementasi ini terinspirasi oleh halaman manual OpenBSD untuk mktemp
. Oleh karena itu, perbedaan yang serupa mungkin diamati oleh pengguna OpenBSD dan FreeBSD (lihat bagian History ).
Sekarang, seperti yang mungkin Anda perhatikan, ini mengharuskan Anda untuk menentukan path file lengkap, termasuk direktori sementara yang Anda cari dalam pertanyaan Anda. Masalah kecil ini dapat diatasi menggunakan -t
sakelar. Sementara opsi ini tampaknya memerlukan argumen ( prefix
), akan muncul yang mktemp
bergantung pada $TMPDIR
saat diperlukan.
Secara keseluruhan, Anda harus bisa mendapatkan hasil yang sama seperti di atas menggunakan ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Setiap umpan balik dari pengguna Mac OS X akan sangat dihargai, karena saya tidak dapat menguji solusi ini sendiri.
${TMPDIR-/tmp}
pada Unix-likes.TMPDIR
apakah ada (oleh sistem atau administrator atau pengguna) untuk memberi tahu Anda kapan tidak digunakan/tmp
untuk file sementara.