사용자에게 디렉터리를 반복적으로 입력하라는 메시지를 표시하려고 합니다. 그런 다음 스크립트는 디렉터리가 존재하는지 확인하고, 없으면 사용자가 유효한 디렉터리를 입력할 때까지 계속 메시지를 표시합니다.
내 코드:
#!/bin/bash
while :
do
echo "Enter a directory:"
read directory
if [ -f $directory ]
then
cd $directory
break
else
echo "Directory does not exists, please try again."
fi
done
이제 문제는 유효한 디렉토리(예: /home/username)를 입력하더라도 해당 디렉토리를 변경하는 대신 계속 반복된다는 것입니다. 무엇이 잘못되었는지 아시나요?
답변1
입력한 코드를 실행했더니 잘 작동했는데 디렉터리를 확인하고 싶어서 -f를 -d로 변경했습니다. 쉘 스크립트를 실행하려면 source 내장 명령을 사용해야 합니다.
$ source script_name.sh
cd 명령은 서브셸 환경에서 실행되므로 명령이 실행되면 if 문으로 테스트한 대로 $directory가 유효한 경우 디렉터리가 변경됩니다.
하위 셸 환경이 상위 셸에 제어권을 반환하면 환경(cd $directory)의 변경 사항이 상위 셸로 전파되지 않습니다. 따라서 동일한 디렉토리에 머물기만 하면 됩니다.
소스는 현재 셸 자체에서 스크립트를 실행하므로 cd 명령이 성공적으로 실행되면 변경 사항이 표시됩니다.