我在開發(fā)一個bash的腳本工具,需要用到相對目錄。問題是腳本是放在 /usr/local/bin 加入PATH里的,這樣我可以在任何地方直接運行,但悲催的是運行過程中,這個相對目錄就出問題了。例如:/usr/local/bin/cmd.sh#!/bin/bashmkdir ../tmp/imgs這個命令我本意是在 mkdir /usr/local/tmp/imgs但如果我在家目錄運行~ # sudo cmd.sh他實際上是去創(chuàng)建 /home/tmp/imgs 的不用絕對路徑的情況下,這種問題怎么解決呢?因為這個工具是有多個腳本和配置組成的,用絕對路徑會有很麻煩的問題。
2 回答
POPMUISE
TA貢獻1765條經(jīng)驗 獲得超5個贊
如果需要處理軟鏈接的情況,可是使用如下函數(shù)
_current_path() {
SOURCE=${BASH_SOURCE[0]} DIR=$( dirname "$SOURCE" ) while [ -h "$SOURCE" ] do
SOURCE=$(readlink "$SOURCE")
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
DIR=$( cd -P "$( dirname "$SOURCE" )" && pwd )
done DIR=$( cd -P "$( dirname "$SOURCE" )" && pwd ) echo $DIR}調(diào)用
cd $(_current_path)
qq_花開花謝_0
TA貢獻1835條經(jīng)驗 獲得超7個贊
如果僅僅是到腳本所在的目錄,下面的就可以:
cd $(dirname $0)
dirname $0是獲取腳本所在的目錄。
如果要獲取執(zhí)行腳本所在目錄的絕對路徑,可以用下面的方法:
CUR_DIR=$(cd `dirname $0` && pwd -P)
pwd -P可以獲取當前目錄的絕對路徑,并且如果當前目錄只是一個軟鏈接,它所顯示得是鏈接目標的絕對路徑。
添加回答
舉報
0/150
提交
取消
