書式
realpath path

概要

realpath コマンドは
関数としても
ビルトイン としても
実装されています。

関数の方は、

  • 外部コマンドとして realpath コマンドが存在する場合はそれを使い
  • 存在しない場合はビルトインを使う

ようにします。

fishでは
移植性を確保するために
ビルトインを用意しました。

ビルトインの方は
オプションを取りません。

あくまでも
移植性が必要なスクリプトを
書くときのみ必要です。

オプションをつけないで
起動した場合は、
GNU realpath(日本語マニュアル) のように
振舞います(最も一般的な場面)。

一般的なスクリプトでは
ビルトインを直接
呼ばないでください。

そのまま realpath を使ってください。

path が不正な場合は、
変換されないパスが
標準出力に出力され、
エラーも出ます。

訳注:実際はエラーのみ出力されるようです。

実行例

/tmp以下に

  1. d1 ディレクトリを作成し
  2. d1/a_file ファイルを作成し
  3. d1dlink というシンボリックリンクを作成

した状態で realpath を使います。

$ cd /tmp
$ mkdir d1
$ touch d1/a_file
$ ln -s d1 dlink
$ realpath d1/a_file
/tmp/d1/a_file
$ realpath dlink/a_file
/tmp/d1/a_file
$ rm dlink; rm -rf d1

存在しない
ディレクトリとファイルを
指定するとエラーになります。

$ realpath /tmp/a/b
realpath: Invalid path: /tmp/a/b

最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。