我在開發一個bash的腳本工具,需要用到相對目錄。問題是腳本是放在 /usr/local/bin 加入PATH里的,這樣我可以在任何地方直接運行,但悲催的是運行過程中,這個相對目錄就出問題了。例如:/usr/local/bin/cmd.sh#!/bin/bashmkdir ../tmp/imgs這個命令我本意是在 mkdir /usr/local/tmp/imgs但如果我在家目錄運行~ # sudo cmd.sh他實際上是去創建 /home/tmp/imgs 的不用絕對路徑的情況下,這種問題怎么解決呢?因為這個工具是有多個腳本和配置組成的,用絕對路徑會有很麻煩的問題。
2 回答

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
如果需要處理軟鏈接的情況,可是使用如下函數
_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}
調用
cd $(_current_path)

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
如果僅僅是到腳本所在的目錄,下面的就可以:
cd $(dirname $0)
dirname $0
是獲取腳本所在的目錄。
如果要獲取執行腳本所在目錄的絕對路徑,可以用下面的方法:
CUR_DIR=$(cd `dirname $0` && pwd -P)
pwd -P
可以獲取當前目錄的絕對路徑,并且如果當前目錄只是一個軟鏈接,它所顯示得是鏈接目標的絕對路徑。
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消