No script bash abaixo, verifico se um arquivo existe ou não e, se não existir, eu o crio e escrevo um trecho simples nele. Funcionou uma vez (não sei porque), mas acho que mudei algo e não está mais funcionando, não consigo encontrar onde está meu erro:
#...
template_file="~/mytest_template.c";
if [[ -z $template_file ]]; then
echo -e "#include <stdio.h>\n#include <stdlib.h>\n\n\nint main(int argc, char**argv){\n\n\t\n\nreturn 0;\n}" > ~/mytest_template.c;
fi
#sleep 0.5; ---> I tried this too.
cp ~/mytest_template.c mytest.c;
O erro que recebo é este:
cp: cannot stat '/home/username/mytest_template.c': No such file or directory
Obrigado.
O
-z
operador testa se uma string está vazia. Aqui, o valor detemplate_file
não está vazio, pois você acabou de atribuir a ele. Portanto, o comando dentro doif
não é executado.Se o arquivo não existia antes da execução do script, ele também não existirá no momento
cp
.Não tenho certeza do que você está tentando testar aqui, mas se você deseja criar o arquivo caso ele não exista, use
! -f $filename
.-f
testa se existe um arquivo e!
inverte o teste.Observe também que na atribuição, o til não é expandido, mas deixado como está, pois está entre aspas:
Você não está usando essa variável no redirecionamento subsequente ou no
cp
comando, para que não tenha problemas com isso.Então,