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

관련 정보