2014-12-28 7 views
0

예를 들어, 만약 내가 입력 ~ 또는 I는 메시지가 입력으로 ~/문서의 변수에 경로를 인식하지 않습니다 : 그런 파일이나 디렉토리배쉬 터미널 때문에 "~"

을하지만 내가 사용하는 경우/home/username/Documents 잘 작동합니다.

echo "Dose onoma katalogou" 

read Directory 

find $Directory -type f -perm 777 

는 이런 일이 발생하는 이유에 대한 어떤 생각 나는 "~"를 포함하여 경로 이름을 입력 할 수하기 위해 문제를 해결할 수있는 방법?

답변

1

bash는 변수 $ 디렉토리를 확장합니다. after ~을 확장하면, $ Directory가 확장되면 ~을 확장 할 시간이 지났습니다.

eval find $Directory -type f -perm 777 

eval은 ~ 및 실행 쉘 확장을 다시 볼 수 있기 때문에 작동합니다.

당신은 간단한 명령으로 효과를 테스트 할 수 있습니다

그런데
tilde='~' 
echo $tilde   # prints a literal ~ 
eval echo $tilde  # prints your home directory 

, 공백을 포함하는 디렉토리 이름 문제가 발생할 것입니다.

+2

주의 :'eval'은 매우 강력한 메커니즘입니다. 사용자가'$ Directory'의 내용을 제어하면 매우 위험합니다. 예를 들어, 사용자가'eval' 명령으로'Directory = '$ (rm -f $ HOME &)''을 얻는다면, 누군가가 매우 불만 스러울 것입니다 - 특히 스크립트가'root'에 의해 실행되는 경우. –