
Estoy escribiendo un script bash y en él hago algo como lo siguiente:
#!/bin/sh
read -p "Enter target directory: " target_dir
cp some/file.txt $target_dir/exists/for/sure/
Cuando ejecuto este script de shell veo e ingreso:
./my_script.sh
Enter target directory: ~/my_dir
Pero me sale el error/salida:
cp: directory ~/my_dir/exists/for/sure/ does not exist
Y, como intento dejar en claro: ese directorio existe al 100%. es decir, puedo ejecutar lo siguiente sin recibir ningún error:
cd ~/my_dir/exists/for/sure/
¿Que está pasando aqui?
Respuesta1
El problema es que eso ~
se toma literalmente y no se expande cuando lo escribes como entrada para read
.
Pruébalo:
$ read target
~
$ ls $target
ls: cannot access '~': No such file or directory
(nota, las comillas alrededor ~
)
eval target=$target # unsafe
o mejor, pero se expande solo ~
:
target="${target/#\~/$HOME}"
o mejor aún, no escriba variables ni similares read
en primer lugar.