我們很長寫腳本,在任意A目錄當執行不同的B目錄
的腳本抓取路徑是A
但實務上有時候希望抓到B目錄
最近在想這個有什麼方法
Linux
以下都是參考:Shell Script 取得 Script 所在目錄位置
不嚴謹
1
2
3
|
#!/usr/bin/sh
echo $0
|
但某時候會遇到問題
如./test.sh
這樣就會抓出 ./test.sh
參考:Shell Script 取得 Script 所在目錄位置
嚴謹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/sh
get_script_dir () {
SOURCE="${BASH_SOURCE[0]}"
# While $SOURCE is a symlink, resolve it
while [ -h "$SOURCE" ]; do
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$( readlink "$SOURCE" )"
# If $SOURCE was a relative symlink (so no "/" as prefix, need to resolve it relative to the symlink base directory
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
echo "$DIR"
}
echo "$(get_script_dir)"
|
參考:Shell Script 取得 Script 所在目錄位置
windows
最近有時候會接觸到 BAT腳本
一樣也是遇到一樣問題
不同的是有分 C / D 曹
在不同地方處理更是麻煩
需要切換C:
或D:
如:
1
2
3
|
D:
cd "D:xxx"
DIR /S /A:-D /B /O:N >list.txt
|
解決方法
1
2
3
4
5
6
7
8
|
@echo ===============================================
:: 切換到腳本所在的目錄
set WORK_DIR=%~dp0
echo Switch to %WORK_DIR%
cd /d %WORK_DIR%
echo %cd%
@echo ===============================================
::...加上自己 script
|
參考:windows下bat批處理中%和%~dp0的區別_菜鳥攻城獅-CSDN博客
彩蛋
最近有很多 JAVA 專案是 Maven
但在找有什麼快速輸入 mvn install
後來看到Linux 執行目錄下所有 Script
突然有靈感應該可以做到
有空再研究(我沒忘記的話)