Kullanıcı ya gibi oluşturulan veya komut bir noktada üzerine yazılacak olan bir dosya yolu ile benim komut dosyası çağırır foo.sh file.txt
veya foo.sh dir/file.txt
.
Oluşturma veya üzerine yazma davranışı, dosyayı >
çıktı yönlendirme operatörünün sağ tarafına koymak veya bir argüman olarak tee
(aslında, bir argüman olarak geçirmek tee
tam olarak yaptığım şeydir) gerekliliklere çok benzer. ).
Senaryonun bağırsaklarından girmeden önce, ben dosya halinde makul kontrolü yapmak istiyorum yapabilirsiniz / üzerine yazılır oluşturulacak, ama aslında bunu oluşturmaz. Bu kontrol mükemmel olmak zorunda değildir ve evet, durumun kontrol ile dosyanın gerçekten yazıldığı nokta arasında değişebileceğini fark ediyorum - ama burada en iyi çaba tipi çözümü ile iyiyim, bu yüzden erken kurtarmalıyım dosya yolunun geçersiz olması durumunda.
Dosyanın oluşturulamamasının nedenlerine örnekler:
- dosya gibi bir dizin bileşeni içeriyor,
dir/file.txt
ancak dizindir
mevcut değil - kullanıcının belirtilen dizinde (veya dizin belirtilmemişse CWD'de yazma izinleri yok)
Evet, "ön" izinlerin denetlenmesinin UNIX Way ™ olmadığını anlıyorum, bunun yerine işlemi denemem ve daha sonra af dilemeliyim. Ancak benim özel komut dosyasında, bu kötü bir kullanıcı deneyimine yol açar ve sorumlu bileşeni değiştiremiyorum.
/foo/bar/file.txt
. Temelde ben için yolu geçmek tee
gibi tee $OUT_FILE
nereye OUT_FILE
komut satırında geçirilir. Bu hem mutlak hem de göreceli yollarla "çalışmalı", değil mi?
tee -- "$OUT_FILE"
en azından ihtiyacın olacak . Dosya zaten varsa veya mevcutsa, ancak normal bir dosya değilse (dizin, symlink, fifo) ne olur?
tee "${OUT_FILE}.tmp"
. Dosya zaten varsa, tee
bu durumda istenen davranış olan üzerine yazar. Bu bir dizinse tee
başarısız olur (sanırım). symlink% 100 emin değilim?