사용자가 지정한 디렉터리에서 파일을 찾는 스크립트가 있습니다.
#!/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
.