スクリプトが実行されるフォルダ自体を除いて、現在のパスを変数に保存するスクリプトを実行したいと思います。例:
/tmp/test/test2/test3/test.sh
path=$PWD
echo $path
しかし、/tmp/test/test2/test3
shスクリプトを含むフォルダを除外したいと思います。
だから私が望む結果は次のとおりです。
/tmp/test/test2
答え1
あなたはそれを使用することができます
dir=${PWD%/*} # or: dir=$( dirname "$PWD" )
または
dir="$PWD/.."
または
dir=".."
最初のケースでは、PWD
現在の作業ディレクトリを含む変数を/
使用して、最後のディレクトリとそれ以降のすべてのエントリを削除して親ディレクトリへのパスを取得します。
2番目の場合、PWD
変数は単に上記のディレクトリへのパスを作成するために使用されます..
。
3番目のケースでは、現在のディレクトリへの相対パスを使用して上記のディレクトリを参照するだけです。
どの代替を使用するかは、パスを使用したいターゲットによって異なります。
例:
$ echo $PWD
/tmp/shell-sh.jAtMYgn0
$ dir=${PWD%/*}
$ echo "$dir"
/tmp
$ dir="$PWD/.."
$ echo "$dir"
/tmp/shell-sh.jAtMYgn0/..
$ dir=".."
$ echo "$dir"
..
答え2
次のコードを試してください。
dirname "$(pwd)"
- dirname - ファイル/ディレクトリパスからサフィックスを削除する
答え3
存在するzsh
:
dir=$PWD:h
同様に、dirname
最後にディレクトリコンポーネントを削除します$PWD
。この場合と同じになります$PWD
。/
$dir
/
dirname
利点よりも1つ
dir=$(dirname -- "$PWD")
$PWD
dirname が改行で終わっても、それでも機能します。
必ずしも現在のディレクトリの親ディレクトリである必要はありません。たとえば、とがシンボリックリンク$PWD
の場合、現在のディレクトリの親ディレクトリはそうではありません。親ディレクトリを取得するには、次のようにします。/tmp
/tmp
/var/tmp
/var
/
dir=$PWD/..
dir=$dir:P
または:
dir=$PWD:P:h
(:P
修飾子は$dir
標準パスを生成します(すべてのシンボリックリンク.
や..
GNUなどのコンポーネントを確認しますreadlink -f
))。
またはPOSIXとして:
dir=$(cd -P .. && pwd -P)
とにかく、$PWD
スクリプト内のパスはスクリプトとは何の関係もないことに注意してください。スクリプトを含むディレクトリの親ディレクトリが必要な場合は、そのディレクトリ$0:P:h:h
はzsh
。
答え4
現在の作業ディレクトリは/home/dev/otherです。
dir=$PWD
親ディレクトリ
parentdir="$(dirname "$dir")"`