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.txtLub 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.txtale katalogdirnie 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ę teepodoba tee $OUT_FILEgdzie OUT_FILEjest 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, teezastępuje, co w tym przypadku jest pożądanym zachowaniem. Jeśli to katalog, teezawiedzie (tak myślę). symlink Nie jestem w 100% pewien?