
我正在編寫一個 bash 腳本,並在其中執行以下操作:
#!/bin/sh
read -p "Enter target directory: " target_dir
cp some/file.txt $target_dir/exists/for/sure/
當我運行這個 shell 腳本時,我看到並輸入:
./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
或者更好的是,首先不要輸入變數或類似內容。