L'utente chiama il mio script con un percorso file che verrà creato o sovrascritto ad un certo punto dello script, come foo.sh file.txt
o foo.sh dir/file.txt
.
Il comportamento di creazione o sovrascrittura è molto simile ai requisiti per mettere il file sul lato destro >
dell'operatore di reindirizzamento di output o passarlo come argomento a tee
(in effetti, passarlo come argomento a tee
è esattamente quello che sto facendo ).
Prima di entrare nelle viscere dello script, voglio fare un controllo ragionevole se il file può essere creato / sovrascritto, ma in realtà non lo crea. Questo controllo non deve essere perfetto, e sì, mi rendo conto che la situazione può cambiare tra il controllo e il punto in cui il file è effettivamente scritto - ma qui sto bene con una soluzione del tipo di sforzo migliore in modo da poter salvare in anticipo nel caso in cui il percorso del file non sia valido.
Esempi di motivi per cui il file non è stato creato:
- il file contiene un componente di directory, come
dir/file.txt
ma la directorydir
non esiste - l'utente non dispone delle autorizzazioni di scrittura nella directory specificata (o nel CWD se non è stata specificata alcuna directory
Sì, mi rendo conto che il controllo delle autorizzazioni "in anticipo" non è The UNIX Way ™ , ma dovrei semplicemente provare l'operazione e chiedere perdono in seguito. Nel mio script particolare, tuttavia, ciò porta a una brutta esperienza dell'utente e non posso modificare il componente responsabile.
/foo/bar/file.txt
. Fondamentalmente passo il percorso per tee
piacere tee $OUT_FILE
dove OUT_FILE
è passato sulla riga di comando. Dovrebbe "solo funzionare" con percorsi sia assoluti che relativi, giusto?
tee -- "$OUT_FILE"
. Cosa succede se il file esiste già o esiste ma non è un file normale (directory, symlink, fifo)?
tee "${OUT_FILE}.tmp"
. Se il file esiste già, tee
sovrascrive, che è il comportamento desiderato in questo caso. Se è una directory, tee
fallirà (penso). symlink non sono sicuro al 100%?