Eu realmente não vejo porque você não pode simplesmente fazer
dir='/home/Documents/projectDirectory'
if ! mkdir "$dir"; then
printf 'Something went wrong when trying to create "%s"\n' "$dir" >&2
exit 1
fi
printf '"%s" created, now doing other things...\n' "$dir"
A chamada para mkdir
falhará se $dir
já existir.
Se você precisar que o diretório exista e só resista se mkdir
falhar em criá-lo, adicione -p
à chamada mkdir
acima ou faça um teste explícito para a existência do diretório :
dir='/home/Documents/projectDirectory'
if [ ! -d "$dir" ]; then
if ! mkdir "$dir"; then
printf 'Something went wrong when trying to create "%s"\n' "$dir" >&2
exit 1
fi
printf '"%s" created\n' "$dir"
fi
echo 'now doing other things...'
Estou usando o teste -d
aqui para testar se $dir
pode ser um diretório. Eu faço isso porque suponho que o resto do script exigirá que o nome não exista apenas , mas que se refira a um diretório real.
Não tente armazenar comandos em variáveis, raramente, ou nunca, o que você precisa fazer. Não é uma boa maneira de economizar em digitar as coisas. Se você precisar de uma maneira mais curta de executar uma ação em um script de shell, crie uma função de shell para ela.
Além disso, adquira o hábito de sempre citar duas vezes suas expansões variáveis. Dessa forma, seus scripts de shell sempre manipularão nomes de arquivos com espaços e nunca invocarão acidentalmente o globbing de nomes de arquivo.
Relacionados:
Outras coisas:
CREATE_DIRECTORY=mkdir $FILEPATH
Isso executará $FILEPATH
como um comando com CREATE_DIRECTORY=mkdir
em seu ambiente. Ele falhará porque $FILEPATH
é um diretório (se existir) ou pelo menos não um comando.
Para criar uma variável com espaços em seu valor, cite o valor.
A linha
if [ -e "${CREATE_COMMAND}" ]; then
não criará um diretório. Ele testará se o valor em $CREATE_COMMAND
corresponde a um nome na hierarquia de arquivos.
Eu não sei o que é error_exit
, mas provavelmente é uma abreviação de um simples echo
e exit 1
ou similar, certo?