./ 및 ../ 디렉토리를 실제 이름으로 바꾸십시오.

./ 및 ../ 디렉토리를 실제 이름으로 바꾸십시오.

사용자가 지정한 디렉터리에서 파일을 찾는 스크립트가 있습니다.

#!/bin/bash

# make sure about the correct input
if [ -z $1 ]
then
    echo "Usage: ./script_name.sh    path/to/directory"
else
    DIR=$1
    if [ $DIR = '.' ]
    then 
        echo "Find files in the directory $PWD"
    else  
        echo "Find files in the directory $DIR"
    fi

    find $DIR -type f -exec basename {} \; 
fi

내가 들어가면

$ ./script_name.sh .

스크립트는 ./를 $PWD로 올바르게 대체하고 표시합니다(예:).

$ Find files in the directory /root/scripts  

하지만 결정을 내릴 수가 없어요../를 디렉토리 이름으로 바꾸는 방법 계층 구조 위에 위치합니다. 내가 들어가면

$ ./script_name.sh ..  

스크립트는 나에게 출력을 제공합니다

$ Find files in the directory ..  

../를 디렉토리의 실제 이름으로 바꾸는 방법을 아는 사람이 있습니까?

답변1

GNU coreutils에는realpath주문하다그것이 바로 그 일입니다.

/tmp/a$ realpath ..
/tmp

그러나 경로에 심볼릭 링크가 포함되어 있으면 해당 링크도 해결됩니다.

/tmp/b/c$ realpath ..
/tmp/x/y

(여기에 /tmp/b심볼릭 링크가 있습니다 /tmp/x/y/)

이는 쉘이 수행하는 작업과 다를 수 있습니다 cd ... 예를 들어, Bash의 cd ../..from은 /tmp/b/c새 경로를 as /tmp/가 아닌 로 표시합니다 /tmp/x.

답변2

몇 가지 생각:

parent="$(dirname "$(pwd)")"

parent="$(
   cd ..
   pwd
)"

답변3

cd먼저 사용하신 ..후 사용하시면 됩니다 $PWD.

관련 정보