Użytkownik wywołuje mój skrypt ze ścieżką do pliku, która zostanie utworzona lub nadpisana w pewnym momencie skryptu, np . foo.sh file.txt
Lub foo.sh dir/file.txt
.
Zachowanie tworzenia lub zastępowania przypomina wymagania dotyczące umieszczenia pliku po prawej stronie >
wyjściowego operatora przekierowania lub przekazania go jako argumentu tee
(w rzeczywistości przekazanie go jako argumentu dotee
jest dokładnie tym, co robię ).
Zanim przejdę do sedna skryptu, chcę w rozsądny sposób sprawdzić, czy plik można utworzyć / zastąpić, ale tak naprawdę go nie tworzyć. Ta kontrola nie musi być idealna i tak, zdaję sobie sprawę, że sytuacja może się zmienić między sprawdzeniem a momentem, w którym plik jest rzeczywiście zapisywany - ale tutaj wszystko jest w porządku z najlepszym wysiłkiem rozwiązaniem typu , dzięki czemu mogę wcześnie wyskoczyć w przypadku, gdy ścieżka do pliku jest nieprawidłowa.
Przykłady powodów, dla których nie udało się utworzyć pliku:
- plik zawiera element katalogu, na przykład,
dir/file.txt
ale katalogdir
nie istnieje - użytkownik nie ma uprawnień do zapisu w określonym katalogu (lub CWD, jeśli nie określono katalogu
Tak, zdaję sobie sprawę, że sprawdzanie uprawnień „z góry” to nie jest UNIX Way ™ , raczej powinienem po prostu spróbować wykonać operację i poprosić o wybaczenie później. W moim konkretnym skrypcie prowadzi to jednak do złego komfortu użytkowania i nie mogę zmienić odpowiedzialnego komponentu.
/foo/bar/file.txt
. Zasadniczo mijam ścieżkę tee
podoba tee $OUT_FILE
gdzie OUT_FILE
jest przekazywane w linii poleceń. To powinno „po prostu działać” na ścieżkach absolutnych i względnych, prawda?
tee -- "$OUT_FILE"
przynajmniej. Co jeśli plik już istnieje lub istnieje, ale nie jest zwykłym plikiem (katalog, dowiązanie symboliczne, fifo)?
tee "${OUT_FILE}.tmp"
. Jeśli plik już istnieje, tee
zastępuje, co w tym przypadku jest pożądanym zachowaniem. Jeśli to katalog, tee
zawiedzie (tak myślę). symlink Nie jestem w 100% pewien?