web-dev-qa-db-ja.com

POSIX shでスクリプトディレクトリを取得する方法

私のbashスクリプトに次のコードがあります。 POSIX shで使用したい。どうすれば変換できますか?

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
51
city

@Cityは、

DIR=$( cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P )

動作します。私も使った。
コマンドは https://stackoverflow.com/questions/760110/can-i-get-the-absolute-path-to-the-cu‌ rrent-script-in- kornshell

0
Walter A
if      OLDPWD=/dev/fd/0 \
        cd - && ls -lLidFH ?
then    cd . <8
fi      </proc/self/fd 8<. 9<$0

そこ。これにより、いくつかのマジックリンクを介してdirectpryをファイル記述子として変更できるようになります。

$OLDPWD pre -cdを設定すると、1つの変更ディレクトリの期間の値がエクスポートされます(注:cdhashテーブルに残余の影響を与える可能性があります、しかし私が実際にこれらをうまく使用していることを知っている唯一のshはkevin ahlmquists-そしてherbert xu-dash、そしておそらくいくつかのbsdのもの、しかし、私は何を知っていますか?しかし、変更の結果としてcdエクスポートを引き継ぎません。

したがって、実際には$OLDPWDは変更されず、値があったとしても、そのままです。 $PWDは最初のcdの結果として変更され、値は/dev/fd/0になり、/proc/self/fdを指します。ここで、プロセスのファイル記述子のリストが.$0./2にあるものをすべて含めます。

ls ... ?を実行して、取得できるすばらしい情報をすべて確認し、来たところから移動します。

わーい!

0
mikeserv