O usuário chama meu script com um caminho de arquivo que será criado ou substituído em algum momento do script, como foo.sh file.txt
ou foo.sh dir/file.txt
.
O comportamento de criação ou substituição é muito parecido com os requisitos para colocar o arquivo no lado direito do >
operador de redirecionamento de saída ou transmiti-lo como argumento para tee
(na verdade, transmiti-lo como argumento para tee
é exatamente o que estou fazendo )
Antes de entrar no âmago do script, quero fazer uma verificação razoável se o arquivo pode ser criado / substituído, mas na verdade não o cria. Essa verificação não precisa ser perfeita, e sim, eu percebo que a situação pode mudar entre a verificação e o ponto em que o arquivo está realmente gravado - mas aqui eu estou bem com a melhor solução de tipo de esforço para que eu possa resgatar cedo no caso em que o caminho do arquivo é inválido.
Exemplos de razões pelas quais o arquivo não pôde ser criado:
- o arquivo contém um componente de diretório, como
dir/file.txt
mas o diretóriodir
não existe - o usuário não tem permissões de gravação no diretório especificado (ou o CWD se nenhum diretório foi especificado
Sim, eu percebo que verificar as permissões "de antemão" não é The UNIX Way ™ ; devo tentar a operação e pedir perdão mais tarde. No meu script específico, no entanto, isso leva a uma experiência ruim do usuário e não posso alterar o componente responsável.
/foo/bar/file.txt
. Basicamente, passo o caminho para tee
gostar de tee $OUT_FILE
onde OUT_FILE
é passado na linha de comando. Isso deve "apenas funcionar" com caminhos absolutos e relativos, certo?
tee -- "$OUT_FILE"
pelo menos. E se o arquivo já existir ou existir, mas não for um arquivo regular (diretório, link simbólico, fifo)?
tee "${OUT_FILE}.tmp"
. Se o arquivo já existir, tee
substitua, qual é o comportamento desejado nesse caso. Se for um diretório, tee
falhará (eu acho). symlink não tenho 100% de certeza?