El comando cp dice que el directorio no existe cuando existe

El comando cp dice que el directorio no existe cuando existe

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 ~)


Utilizar esta:

eval target=$target # unsafe

o mejor, pero se expande solo ~:

target="${target/#\~/$HOME}"

o mejor aún, no escriba variables ni similares readen primer lugar.

información relacionada