Contents

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
突然有靈感應該可以做到
有空再研究(我沒忘記的話)