comando cp dizendo que o diretório não existe quando existe

comando cp dizendo que o diretório não existe quando existe

Estou escrevendo um script bash e nele estou fazendo algo parecido com o seguinte:

#!/bin/sh
read -p "Enter target directory: " target_dir
cp some/file.txt $target_dir/exists/for/sure/

Quando executo este script de shell, vejo e insiro:

./my_script.sh
Enter target directory: ~/my_dir

Mas recebo o erro/saída:

cp: directory ~/my_dir/exists/for/sure/ does not exist

E, como estou tentando deixar óbvio: esse diretório existe 100%. ou seja, posso executar o seguinte sem receber nenhum erro:

cd ~/my_dir/exists/for/sure/

O que está acontecendo aqui?

Responder1

O problema é que isso ~é interpretado literalmente e não expandido quando você digita como entrada para read.

Teste-o:

$ read target
~
$ ls $target
ls: cannot access '~': No such file or directory

(observe as aspas ao redor ~)


Usa isto:

eval target=$target # unsafe

ou melhor, mas expande apenas ~:

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

ou melhor ainda, não digite variáveis ​​ou algo semelhante readem primeiro lugar.

informação relacionada