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または、最初から変数などを入力しない方が良いでしょう。

関連情報