ユーザーが指定したディレクトリからファイルを検索するスクリプトがあります。
#!/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
。