私は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/
何が起きてる?
問題は、それ~
が文字通りに取得され、の入力として入力したときに展開されないことですread
。
試して:
$ read target
~
$ ls $target
ls: cannot access '~': No such file or directory
(注、周りの引用符~
)
eval target=$target # unsafe
以上ですが、拡張するだけ~
です:
target="${target/#\~/$HOME}"
またはさらに良いことに、そもそも変数などを入力しないでくださいread
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加