GNU/Linux >> Belajar Linux >  >> Linux

atom buat file jika tidak ada dari skrip bash

Anda dapat membuatnya dengan nama yang dibuat secara acak, lalu ganti nama (mv -n random desired ) ke tempatnya dengan nama yang diinginkan. Penggantian nama akan gagal jika file sudah ada.

Seperti ini:

#!/bin/bash

touch randomFileName
mv -n randomFileName lockFile

if [ -e randomFileName ] ; then
    echo "Failed to acquired lock"
else
    echo "Acquired lock"
fi

Solusi bash murni 100%:

set -o noclobber
{ > file ; } &> /dev/null

Perintah ini membuat file bernama file jika tidak ada file bernama file . Jika ada file bernama file , lalu tidak melakukan apa pun (tetapi mengembalikan kode pengembalian bukan nol).

Pro menulis touch perintah:

  • Tidak memperbarui stempel waktu jika file sudah ada
  • 100% bash bawaan
  • Kembalikan kode seperti yang diharapkan:gagal jika file sudah ada atau jika file tidak dapat dibuat; sukses jika file tidak ada dan telah dibuat.

Kontra:

  • perlu menyetel noclobber opsi (tetapi tidak apa-apa dalam skrip, jika Anda berhati-hati dengan pengalihan, atau menghapusnya setelah itu).

Saya kira solusi ini benar-benar pasangan bash dari open panggilan sistem dengan O_CREAT | O_EXCL .


Inilah fungsi bash menggunakan mv -n trik:

function mkatomic() {
  f="$(mktemp)"
  mv -n "$f" "$1"
  if [ -e "$f" ]; then
    rm "$f"
    echo "ERROR: file exists:" "$1" >&2
    return 1
  fi
}

Contoh:

$ mkatomic foo
$ wc -c foo
0 foo
$ mkatomic foo
ERROR: file exists: foo

Linux
  1. Mencegah skrip bash berjalan secara bersamaan

  2. Bisakah Skrip Bash Dihubungkan ke File?

  3. Bash Script Untuk Menghapus File Terlama Dari Folder A?

  1. Bash Script:Periksa Apakah File Adalah File Teks?

  2. Bagaimana Membuat File Sementara Di Shell Script?

  3. Jalankan skrip bash dari URL

  1. pindahkan hanya jika file ada dalam skrip shell

  2. Temukan apakah file ada atau tidak di HDFS menggunakan skrip shell

  3. Mengotomatiskan input tekstual dari skrip bash tanpa menggunakan EOF