程式狂想筆記

一個攻城師奮鬥史

0%

Linux/Windows 執行腳本抓取當前腳本路徑方法

我們很長寫腳本,在任意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
突然有靈感應該可以做到
有空再研究(我沒忘記的話)