Saya ingin Bash one-liner yang secara atomis membuat file jika tidak ada. Itu pada dasarnya berarti "jika file tidak ada, buatlah" tetapi memastikan bahwa tidak ada orang lain yang berhasil membuat file dalam ruang kecil antara melakukan if dan membuat file.
9
Jawaban:
Mencuri jawaban dari berbagai komentar dan tautan ke [SO]. Tampaknya ada metode yang sesuai POSIX yang tidak melibatkan
mkdir
seperti yang saya sebutkan dalam jawaban asli saya di bawah iniPengalihan ke file ini mengembalikan 0 atau gagal dan mengembalikan non-nol jika file sudah ada.
Jawaban asli
Anda harus menggunakan
mkdir
- itu atomik, baik direktori dibuat dan Anda dapat melanjutkan atau tidak dibuat sehingga Anda mengambil tindakan yang tepat.Tentu saja,
mkdir
tidak membuat file tetapi setelah Anda tahu Anda memiliki akses eksklusif ke direktori maka Anda dapat membuat file yang Anda inginkan di dalamnya.Mengenai satu liner - saya akan menyerahkannya kepada Anda. Secara pribadi saya akan menulisnya dalam beberapa baris, karena itu akan lebih bisa dipertahankan.
sumber
Apakah itu file atau direktori? Jika file, Anda dapat menggunakan sentuhan perintah sederhana - jika file ada, itu hanya mengubah waktu akses terakhir. Jika file tidak ada, dibuat.
sumber
Coba yang ini. Ini
ln
menyediakan fungsionalitas uji-dan-set.sumber
Jika Anda tidak peduli dengan nama file, Anda dapat mendelegasikan tugas ini ke utilitas, misalnya mktemp
Doa:
sumber