Unixファイル名とパス[閉じる]

Unixファイル名とパス[閉じる]
  1. ディレクトリのフルファイル名を取得するには?
  2. ファイルパスにもルートディレクトリを含めないでください。

ベストアンサー1

POSIXly、パス(現在のディレクトリへの相対パス、シンボリックリンクを含む)が格納されているディレクトリのシンボリックリンクされていない絶対パスを取得するには、次のものが$dirあります。探すディレクトリに対する権限を取得するには、次の手順を実行します。

(
  case $dir in
    (/*) CDPATH= cd -P "$dir";;
    ("") CDPATH= cd -P "";;
    (*) CDPATH= cd -P "./$dir";;
  esac && pwd -P
)

以下は、以下からそのままコピーされました。このテキストは、POSIX 仕様の次のバージョンに含まれる予定です。

ここで言及されているように、この場合、現在指定されていない動作に依存""または作成するのではなく、エラーを印刷できます。cd

(
  case "${dir:?directory cannot be empty}" in
    (/*) CDPATH= cd -P "$dir";;
    (*) CDPATH= cd -P "./$dir";;
  esac && pwd -P
)

絶対的でない場合、プレフィックス$dirwithは起動時にオプションと見なされず./(十分)意味として解釈されない特別な値に使用されます。$dir-CDPATH= cd -P -- "${dir:?cannot be empty}"-cd$OLDPWD以前の作業ディレクトリ(そしてCDPATH= OLDPWD=- cd -P -- "${dir:?cannot be empty}"この問題を解決するためにポータブルでは使用できません)。

一つの状況は目次現在のディレクトリで親ディレクトリから切断されている場合、絶対パスはありません。

$ mkdir 1
$ cd 1
$ rmdir ../1
$ cd -P .
$ ls -ld .
drwxr-xr-x 0 chazelas chazelas 0 Mar 27 06:53 ./
$ [ -d . ] && echo yes
yes

しかし、まだ存在します。

$ pwd -P
.
$ realpath .
realpath: .: No such file or directory
$ readlink -ve .
readlink: .: No such file or directory

ファイルシステムにパスがありません。

これそのファイルやディレクトリはありません。errorはディレクトリが存在するため、少し誤解を招くことが.ありますが(たとえそれで多くのことはできませんが)、少なくともLinuxではerrnoをgetcwd()返すとENOENT現在のディレクトリが切断されたことを示します。

おすすめ記事