我有一个脚本可以在用户指定的目录中查找文件。
#!/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/
)
这可能与 shell 所做的不同cd ..
。例如, Bash 中cd ../..
的 from/tmp/b/c
将新路径显示为/tmp/
,而不是 as /tmp/x
。
答案2
一些想法:
parent="$(dirname "$(pwd)")"
parent="$(
cd ..
pwd
)"
答案3
您可以先cd
使用..
然后使用$PWD
.