Пользователь вызывает мой сценарий с путем к файлу, который будет либо создан, либо перезаписан в какой-то момент сценария, например 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%?