私のbashスクリプトに次のコードがあります。 POSIX shで使用したい。どうすれば変換できますか?
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
@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 。
if OLDPWD=/dev/fd/0 \
cd - && ls -lLidFH ?
then cd . <8
fi </proc/self/fd 8<. 9<$0
そこ。これにより、いくつかのマジックリンクを介してdirectpryをファイル記述子として変更できるようになります。
$OLDPWD
pre -cd
を設定すると、1つの変更ディレクトリの期間の値がエクスポートされます(注:cd
はhash
テーブルに残余の影響を与える可能性があります、しかし私が実際にこれらをうまく使用していることを知っている唯一のsh
はkevin ahlmquists-そしてherbert xu-dash
、そしておそらくいくつかのbsd
のもの、しかし、私は何を知っていますか?しかし、変更の結果としてcd
エクスポートを引き継ぎません。
したがって、実際には$OLDPWD
は変更されず、値があったとしても、そのままです。 $PWD
は最初のcd
の結果として変更され、値は/dev/fd/0
になり、/proc/self/fd
を指します。ここで、プロセスのファイル記述子のリストが.
、$0
が./2
にあるものをすべて含めます。
ls ... ?
を実行して、取得できるすばらしい情報をすべて確認し、来たところから移動します。
わーい!