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.txtveya 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 teetam 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.txtancak dizindirmevcut 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 teegibi tee $OUT_FILEnereye OUT_FILEkomut 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, teebu durumda istenen davranış olan üzerine yazar. Bu bir dizinse teebaşarısız olur (sanırım). symlink% 100 emin değilim?