¿Por qué bash
verifica lo siguiente si falla un directorio?
if [ ! -d "~/Desktop" ]; then
echo "DOES NOT EXIST"
exit 1;
fi
~/Desktop
De hecho existe. Esto está en una Mac por cierto.
El problema es con este 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"
, también obtienes un error. Tiene que estar sin comillas o almacenado como una variable (sin comillas). Por ejemplo,a=~/Desktop; cd $a;
funciona pero noa="~/Desktop"; cd Desktop;
Ver serverfault.com/questions/417252/…Respuestas:
Justin aclaró su pregunta en su primer comentario sobre la respuesta de quanta. Él está leyendo en una línea de texto usando
read
(o por algún otro medio dinámico) y quiere expandir la tilde.La pregunta se convierte en "¿Cómo se realiza la expansión de tilde en el contenido de una variable?"
El enfoque general es usar
eval
, pero viene con algunas advertencias importantes, a saber, espacios y redirección de salida (>
) en la variable. Lo siguiente parece funcionar para mí:Pruébelo con cada una de las siguientes entradas:
Explicación
${mypath//>}
excluye los>
caracteres que podrían Clobber un archivo durante eleval
.eval echo ...
es lo que hace la expansión tilde realeval
son para el soporte de nombres de archivos con espacios.Como complemento de esto, puede mejorar la experiencia de usuario agregando la
-e
opción de leer:Ahora, cuando el usuario escriba tilde y presione la pestaña, se expandirá. Sin embargo, este enfoque no reemplaza el enfoque de evaluación anterior, ya que la expansión solo ocurre si el usuario toca la pestaña. Si solo escribe ~ / foo y pulsa enter, permanecerá como una tilde.
Ver también:
fuente
Elimine las comillas dobles alrededor del directorio para ver si funciona:
La razón de esto es que la expansión de tilde solo funciona cuando no está entre comillas.
info "(bash) Tilde Expansion"
fuente
DESTINATION
es~/Desktop
.No funciona no solo en Mac sino en cualquier plataforma que ejecute bash on.
Cuando cita "~ / Desktop" le está diciendo a bash que busque Desktop dentro de la carpeta ~. La cita elimina el propósito especial de ~
Ver: http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion
Elimine las comillas dobles y debería funcionar.
fuente
correr
use
$HOME
, y asegúrese de que el usuario esté usando el script. si root usa~
va a mirar adentro/root
, no/home/$USER
.fuente
debería ser $ HOME en lugar de ~
~ es una cosa de TECLADO
fuente