Команда cp сообщает, что каталог не существует, хотя на самом деле он существует

Команда cp сообщает, что каталог не существует, хотя на самом деле он существует

Я пишу bash-скрипт и в нем делаю что-то вроде следующего:

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

Когда я запускаю этот скрипт оболочки, я вижу и ввожу:

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

Но я получаю ошибку/вывод:

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

И, как я пытаюсь сделать очевидным: этот каталог 100% существует. То есть я могу выполнить следующее, не получив никаких ошибок:

cd ~/my_dir/exists/for/sure/

Что тут происходит?

решение1

Проблема в том, что это ~воспринимается буквально и не раскрывается, когда вы вводите это в качестве входных данных для read.

Попробуй это:

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

(обратите внимание на кавычки ~)


Использовать это:

eval target=$target # unsafe

или лучше, но расширяется только ~:

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

readили, что еще лучше, вообще не вводите переменные и т. п.

Связанный контент