5

現在のスクリプトの絶対パスを取得するための簡単なソリューションを探しています。プラットフォームに依存しない必要があります(Linux、freebsd、macosでbashなしで動作するようにしたい)。

  • 「readlink-f$0」は、Linuxでは機能しますが、freebsdおよびmacosでは機能しません。readlinkには「-f」オプションがありません。
  • 「realpath$0」は、freebsdとlinuxで機能しますが、macosでは機能しません。このコマンドはありません。

編集:スクリプトのリポジトリのパスを取得するためのソリューション:

DIR = "$(cd" $(dirname "$ 0") "&& pwd)"(ソース:Bashスクリプトのソースディレクトリを内部から取得する

4

2 に答える 2

4
#!/bin/sh

self=$(
    self=${0}
    while [ -L "${self}" ]
    do
        cd "${self%/*}"
        self=$(readlink "${self}")
    done
    cd "${self%/*}"
    echo "$(pwd -P)/${self##*/}"
)

echo "${self}"

それは「ほとんどポータブル」です。パターン置換とpwd -Pは POSIX であり、後者は通常シェル組み込みです。readlinkかなり一般的ですが、POSIX にはありません。

そして、より簡単でほとんど移植可能な方法はないと思います。そのようなものが本当に必要な場合は、すべてのシステムにrealpathをインストールすることをお勧めします。

于 2012-08-27T16:02:37.410 に答える
1

zsh スクリプトの場合、FWIW:

#! /bin/zsh -
fullpath=$0:A
于 2012-08-27T15:37:10.027 に答える