Пользователь вызывает мой сценарий с путем к файлу, который будет либо создан, либо перезаписан в какой-то момент сценария, например foo.sh file.txt
или foo.sh dir/file.txt
.
Поведение «создать или перезаписать» во многом похоже на требования для размещения файла справа от >
оператора перенаправления вывода или для передачи его в качестве аргумента tee
(фактически, передача его в качестве аргумента tee
является именно тем, что я делаю ).
Перед тем, как попасть в кишках сценария, я хочу , чтобы сделать разумный контроль , если файл может быть создан / перезаписаны, но на самом деле не создать. Эта проверка не обязательно должна быть идеальной, и да, я понимаю, что ситуация может измениться между проверкой и моментом, когда файл фактически записан, - но здесь у меня все в порядке с наилучшим решением для типов усилий, поэтому я могу выручить рано в случае, если путь к файлу неверен.
Примеры причин, по которым файл не может быть создан:
- файл содержит компонент каталога, например,
dir/file.txt
но каталогdir
не существует - пользователь не имеет разрешения на запись в указанный каталог (или CWD, если каталог не был указан
Да, я понимаю, что проверка разрешений "заранее" - это не UNIX Way ™ , скорее я должен просто попробовать выполнить операцию и попросить прощения позже. Однако в моем конкретном сценарии это приводит к плохому взаимодействию с пользователем, и я не могу изменить ответственный компонент.
/foo/bar/file.txt
. В основном я прохожу путь tee
нравится , tee $OUT_FILE
когда OUT_FILE
передается в командной строке. Это должно "просто работать" как с абсолютными, так и с относительными путями, верно?
tee -- "$OUT_FILE"
хотя бы. Что если файл уже существует или существует, но не является обычным файлом (каталог, символическая ссылка, fifo)?
tee "${OUT_FILE}.tmp"
. Если файл уже существует, tee
перезаписывает, что является желаемым поведением в этом случае. Если это каталог, не tee
получится (я думаю). символическая ссылка Я не уверен на 100%?