비교할 때 경로를 인쇄하지 않도록 스크립트를 어떻게 수정합니까?

비교할 때 경로를 인쇄하지 않도록 스크립트를 어떻게 수정합니까?
cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
        echo "YES"
else
        echo "NO"
fi
cd -

예, 다음과 같이 인쇄됩니다.

YES
/tmp

하지만 난 그냥 원해

YES

답변1

경로를 인쇄하는 것이 cd -마지막 명령입니다. 최종 작업 디렉터리를 볼 수 있도록 경로를 인쇄합니다. 이는 cd피연산자(단일 대시)를 사용하여 호출할 때 나타나는 특별한 동작 이며 -, 이 경우 다음과 동일합니다.

cd "$OLDPWD" && pwd

cd "$OLDPWD"이를 방지하려면 ( OLDPWD이전 작업 디렉토리의 값을 보유하는 특수 변수)를 사용할 수 있지만 ,cd /tmp 실패및 코드 출력 NO, 그리고 둘 다 cd -예상치 cd "$OLDPWD"못한 디렉토리로 이동될 수 있습니다.

대신에

(
    cd /tmp
    if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
        echo YES
    else
        echo NO
    fi
)

첫 번째는 서브쉘 외부의 작업 디렉토리에 cd영향을 주지 않습니다 .(...)

또한 테스트가 더욱 안전하고 효율적으로 실행됩니다.

if [[ $PWD == */tmp ]]; then
    echo YES
else
    echo NO
fi

PWD변수는 현재 작업 디렉토리의 경로 이름을 포함하며 일반적으로 명령 대신 사용하려는 변수입니다 pwd. 테스트는 단순히 현재 작업 디렉터리의 경로 이름이 string 으로 끝나는지 여부를 테스트합니다 /tmp. 이는 awk코드에서 수행하려는 작업입니다(그러나 경로 이름에 개행 문자가 포함되어 있으면 실패합니다).

cd들어갈 수 있는지 확인하고 싶지만 /tmp실제로는 들어갈 수 없는 경우 다음을 사용하세요.

( if cd /tmp; then echo YES; else echo NO; fi )

macOS 및 Solaris와 같은 외부 cd유틸리티가 있는 시스템에서는 다음과 같이 사용할 수 있습니다.

if /usr/bin/cd /tmp; then
    echo YES
else
    echo NO
fi

외부 cd유틸리티는 실제로 작업 디렉터리를 변경하는 데 사용할 수 없지만 특정 디렉터리로 변경할지 여부를 결정하는 등의 테스트에는 여전히 유용할 수 있습니다.가능할 것이다. 당신은 또한 볼 수 있습니다"cd" 외부 명령의 의미는 무엇입니까?

수행하려는 작업이 /tmp디렉터리가 존재하고 디렉터리(또는 디렉터리에 대한 심볼릭 링크)인지 테스트하는 것이라면 가장 일반적인 접근 방식은 사용하지 않고 cd다음과 같은 테스트를 사용하는 것입니다.

if [ -d /tmp ]; then
    echo YES
else
    echo NO
fi

관련 정보