2013-11-25 6 views
5

私はアンインストーラスクリプトを使って、スクリプトがインストールされている親フォルダを削除しています。スクリプトの親ディレクトリを取得する

/usr/local/Myapplication/Uninstaller/uninstall.sh 

のでuninstall.shはこれを行うにはあります

rm- rf /usr/local/Myapplication 

私はアンインストールが

SYMLINKS=$(readlink -f "$0") 
UNINSTALL_PATH=$(dirname "$SYMLINKS") 

を常駐しかし、私はまだ取得するかなりの方法がわからないんですフォルダを取得することができます親パス。 私はsedを使ってこのパスの "Uninstaller"部分を削除することを考えましたが、Myapplicationフォルダへのパスを削除するためのエレガントな方法がありますか?

+0

: 'CD "$(dirnameは "$ 0")" && CD .. && CD .. && [-d私のA pplication/Uninstaller] && rm -rf Myapplication'(私が削除しようとしているディレクトリにサブディレクトリ「Uninstaller」が含まれていることを確認しましたが、Myapplication内に必要なファイルなどのチェックを入れても良いでしょうか? Myapplicationが分からない場合は、 'cd $(dirname $ 0)" && cd .. && zepath = "$(pwd)" && cd。&& [-f "$ {zepath}/somefilesthathould here"] && rm -rf "$ {zepath}" ' –

+0

有名な[Bashスクリプトで格納されているディレクトリを教えてください](http://stackoverflow.com/questions/59895/can-a-bash-script-tell-どのディレクトリに格納されているのでしょうか)、そこから 'cd ..'を実行してください。 –

答えて

9

dirnameを2回使用することはどうですか?

APP_ROOT="$(dirname "$(dirname "$(readlink -fm "$0")")")" 

引用符は、パス内の空白を防ぐためにのみ必要です。そうでなければ、それは目にはもっと楽しいだろう:

APP_ROOT=$(dirname $(dirname $(readlink -fm $0))) 
+0

これは動作しますが、私はdirnameを2回使用して私が望むものを得ることができないかと思います。より多くの目的を学習するために、単一のコマンドラインでそれを得る方法がありますか? 'APP_ROOT = $(dirname" '' $(readlink -f "$ 0") '' ")'は動作しますが、他の方法はありますか? –

+0

あなたはそれについてiffyである必要はありません。 'dirname'はあなたにパスのディレクトリの一部を与えるように調整されています。そうするのはまさに正しい道具です。私は構文の答えを更新します。 – Boldewyn

+0

このメソッドは "醜い"名前では安全ではありません。 "-rm -rf"のような名前は、望ましい動作を破ります。多分 "。"やります。私はそれが最善の方法であるかどうかは分かりませんが、ここでは別の「正しさに焦点を当てた」質問を作成しました:http://stackoverflow.com/questions/40700119/get-parent-directory-for-a-file- in-bash – VasyaNovikov

0
あなたは、単にパスの最後に../追加しないのはなぜ

をいただき、ありがとうございますか!

+0

これはrmで動作しません。UNMINSTALL_PATH = $(dirname "$ SYMLINKS")/../ rmコマンドで使用すると正しい父のパスではありません –

+2

また、 '/../'を追加する必要があります。何らかの理由で '$ UNINSTALL_PATH'が空であれば、' /../ ==/'あなたはハードドライブを拭き取っています。 – Boldewyn

4

ちょうど親ディレクトリの親を取得する:あなたは絶対パスが必要な場合は

my_app_path=$(dirname $(dirname $(readlink -f "$0"))) 
3

、あなたはcdを必要としています。スクリプト、すなわち "は/ usr/local/binに/ BLA" の親ディレクトリへ

PARENT_DIRECTORY="${PWD%/*}" 
4

を使用することができます:スクリプトのexport PARENT_OF_THIS_SCRIPT=$(cd $(dirname $0) ; pwd -P)

ただ、最近の親、すなわち "BLA":スクリプト内export PARENT_DIR_OF_SCRIPT=$(cd $(dirname $0) ; pwd -P | xargs basename)

+2

これは現在のディレクトリの親ディレクトリであり、スクリプトが存在しないディレクトリです。これを使うには、スクリプトディレクトリにCDを置かなければならないので、あまりにもエレガントではありません。 –

2

フルパス:そうでなければ、あなただけの親ディレクトリのパスを取得する究極のシンプルな方法$(dirname $0)/..

cd $(dirname $0)/.. 
path=$(pwd) 
cd - # go back