bash - Tilde en ruta no se expande al directorio de inicio
syntax tilde-expansion (4)
Digamos que tengo una carpeta llamada Foo
ubicada en /home/user/
(mi /home/user
también está representado por ~
).
Quiero tener una variable
a="~/Foo"
y luego haz
cd $a
Obtengo -bash: cd: ~/Foo: No such file or directory
Sin embargo, si acabo de hacer cd ~/Foo
funciona bien. ¿Alguna pista sobre cómo hacer que esto funcione?
Puede usar $HOME
lugar de la tilde (la tilde se expande por el shell a los contenidos de $HOME
). Ejemplo:
dir="$HOME/Foo";
cd "$dir";
Puedes hacerlo (sin comillas durante la asignación de variables):
a=~/Foo
cd "$a"
Pero en este caso, la variable $a
no almacenará ~/Foo
sino la forma expandida /home/user/Foo
. O podrías usar eval
:
a="~/Foo"
eval cd "$a"
Si usa comillas dobles, el ~ se mantendrá como ese carácter en $ a.
cd $ a no expandirá el ~ ya que el shell no expande los valores de las variables.
La solucion es:
eval "cd $ a"
Una solución mucho más robusta sería usar algo como sed o, mejor aún, la expansión de parámetros de bash:
somedir="~/Foo/test~/ing";
cd ${somedir/#/~/$HOME}
o si tiene que usar sed,
cd $(echo $somedir | sed "s#^~#$HOME#")