Pengguna memanggil skrip saya dengan jalur file yang akan dibuat atau ditimpa pada beberapa titik dalam skrip, seperti foo.sh file.txt
atau foo.sh dir/file.txt
.
Perilaku create-or-overwrite mirip dengan persyaratan untuk meletakkan file di sisi kanan >
operator redirect output, atau meneruskannya sebagai argumen untuk tee
(pada kenyataannya, meneruskannya sebagai argumen tee
adalah apa yang saya lakukan ).
Sebelum saya masuk ke nyali script, saya ingin melakukan pemeriksaan yang masuk akal apakah file tersebut dapat dibuat / ditimpa, tetapi tidak benar-benar membuatnya. Pemeriksaan ini tidak harus sempurna, dan ya saya menyadari bahwa situasinya dapat berubah antara cek dan titik di mana file tersebut sebenarnya ditulis - tetapi di sini saya OK dengan solusi jenis upaya terbaik sehingga saya dapat menyelamatkan lebih awal dalam hal path file tidak valid.
Contoh alasan file tidak dapat dibuat:
- file berisi komponen direktori, seperti
dir/file.txt
tetapi direktoridir
tidak ada - pengguna tidak memiliki izin menulis di direktori yang ditentukan (atau CWD jika tidak ada direktori yang ditentukan
Ya, saya menyadari bahwa memeriksa izin "di muka" bukan The UNIX Way ™ , melainkan saya harus mencoba operasi dan meminta pengampunan nanti. Namun dalam skrip khusus saya, ini mengarah pada pengalaman pengguna yang buruk dan saya tidak dapat mengubah komponen yang bertanggung jawab.
/foo/bar/file.txt
. Pada dasarnya saya melewati jalan untuk tee
menyukai tee $OUT_FILE
tempat OUT_FILE
dilewatkan pada baris perintah. Itu harus "hanya bekerja" dengan jalur absolut dan relatif, bukan?
tee -- "$OUT_FILE"
. Bagaimana jika file tersebut sudah ada atau ada tetapi bukan file biasa (direktori, symlink, fifo)?
tee "${OUT_FILE}.tmp"
. Jika file sudah ada, tee
timpa, yang merupakan perilaku yang diinginkan dalam kasus ini. Jika itu direktori, tee
akan gagal (saya pikir). symlink Saya tidak yakin 100%?