Por que o seguinte bash
verifica se um diretório falha?
if [ ! -d "~/Desktop" ]; then
echo "DOES NOT EXIST"
exit 1;
fi
~/Desktop
de fato existe. Este é um Mac por sinal.
O problema é com esse tipo de script
read -p "Provide the destination directory: " DESTINATION
if [ ! -d $DESTINATION ]; then
echo "\t'$DESTINATION' does not exist." >&2;
exit 1;
fi
cd "~/Desktop"
você também recebe um erro. Ele deve ser não citado ou armazenado como uma variável (sem aspas). Por exemplo,a=~/Desktop; cd $a;
funciona, mas nãoa="~/Desktop"; cd Desktop;
Veja serverfault.com/questions/417252/...Respostas:
Justin esclareceu sua pergunta em seu primeiro comentário sobre a resposta dos quanta. Ele está lendo uma linha de texto usando
read
(ou por outros meios dinâmicos) e deseja expandir o til.A pergunta se torna "Como você realiza a expansão de til no conteúdo de uma variável?"
A abordagem geral é usar
eval
, mas vem com algumas advertências importantes, como espaços e redirecionamento de saída (>
) na variável. O seguinte parece funcionar para mim:Experimente com cada uma das seguintes entradas:
Explicação
${mypath//>}
retira>
personagens que poderia espancar um arquivo durante aeval
.eval echo ...
que é a expansão de til atualeval
são para suporte de nomes de arquivos com espaços.Como complemento, você pode melhorar o UX adicionando a
-e
opção de ler:Agora, quando o usuário digitar til e clicar na guia, ele será expandido. Essa abordagem não substitui a abordagem de avaliação acima, no entanto, como a expansão só acontece se o usuário clicar na guia. Se ele digitar ~ / foo e pressionar enter, ele permanecerá como um til.
Veja também:
fonte
Remova as aspas duplas ao redor do diretório para ver se funciona:
A razão para isso é que a expansão til só funciona quando não está entre aspas.
info "(bash) Tilde Expansion"
fonte
DESTINATION
é~/Desktop
.Ele não funciona não apenas no Mac, mas em qualquer plataforma que executa o bash.
Ao citar "~ / Desktop", você está dizendo ao bash para procurar o Desktop dentro da pasta ~. A citação remove o objetivo especial de ~
Consulte - http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion
Remova as aspas duplas e deve funcionar.
fonte
corre
use
$HOME
e verifique se o usuário está realmente usando o script. se o root usa~
sua busca/root
, não/home/$USER
.fonte
deve ser $ HOME em vez de ~
~ é uma coisa do TECLADO
fonte