나는 다음과 같은 작업을 수행하는 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
아니면 처음부터 변수나 그와 유사한 것을 입력하지 않는 것이 더 좋습니다.