Saya memiliki skrip yang perlu membuat file sementara untuk pekerjaannya, dan membersihkannya sendiri. Pertanyaan saya adalah tentang menemukan direktori basis yang tepat untuk file sementara.
Skrip harus bekerja pada beberapa platform: Git Bash (Windows), Solaris, Linux, OSX. Pada setiap platform, direktori temp yang disukai diekspresikan secara berbeda:
- Windows:
%TMP%
(dan mungkin%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: seharusnya
$TMPDIR
tetapi tampaknya tidak disetel pada beberapa sistem yang saya coba
Jadi dalam skrip saya, saya menambahkan boilerplate ini:
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
Ini sepertinya terlalu membosankan. Apakah ada cara yang lebih baik?
shell-script
directory
tmp
Hentikan bahaya yang berkelanjutan pada Monica
sumber
sumber
${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.Jawaban:
Cara yang sedikit lebih portabel untuk menangani file sementara adalah dengan menggunakan
mktemp
. Ini akan membuat file sementara dan mengembalikan jalurnya untuk Anda. Misalnya:Anda dapat menggunakannya dalam skrip dengan mudah:
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 ...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: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 yangmktemp
bergantung pada$TMPDIR
saat diperlukan.Secara keseluruhan, Anda harus bisa mendapatkan hasil yang sama seperti di atas menggunakan ...
Setiap umpan balik dari pengguna Mac OS X akan sangat dihargai, karena saya tidak dapat menguji solusi ini sendiri.
sumber
gitbash
untuk mendapatkan antarmuka shell, karenanya "sedikit". Saya sebenarnya tidak dapat mengetahui di mana file temp disimpan pada sistem Windows ...c:\User\Name\..............\stuff
. Dan mungkin ada 100 dari mereka. Namun, beberapa distro linux mendekati tingkat kegilaan yang sama/var
. Saya penasaran. Itu menurut saya sebagai cara yang aneh untuk mengatakan itu semua - dalam pengalaman saya frustrasi sangat portabel, dan kenyamanan kurang begitu. Jawaban yang sangat bagus.WINDOWS/Temp
atauWindows/Temp
sebagai direktori default untuk file tempnya; direktori itu juga ada di mesin Windows 7. Tapi skrip saya memungkinkan pengguna untuk memasok dir temp alternatif pada baris perintah.mktemp
.mktemp
hanya berfungsi: sederhanamktemp
mengembalikan file, danmktemp -d
mengembalikan direktori; tidak diperlukan templat. The pengguna tidak diperbarui sekalipun.Jika Anda mencari hal yang sama di baris yang lebih sedikit ...
Anda bisa menulis ini dalam satu.
sumber
Anda mungkin melakukannya:
Shell harus menemukan direktori yang dapat dieksekusi di salah satu dari 4 alternatif atau keluar dengan kesalahan yang berarti. Namun, POSIX mendefinisikan
$TMPDIR
variabel (untuk sistem XCU) :Itu juga membutuhkan
/tmp
jalan.sumber